2008-09-26 9 views
3

Linux/NPTL에서 스레드는 일종의 프로세스로 만들어집니다./proc/PID/cmdline 스레드 설정 중?

cat /proc/5590/cmdline 
hald-addon-storage: polling /dev/scd0 (every 2 sec) 

당신이 내 프로세스의 각 스레드에 대해 그렇게 할 수있는 방법을 생각을 가지고 있습니까 : 내 프로세스의 일부는 이상한있는 CmdLine을 볼 수 있습니다

? 이것은 디버깅에 매우 유용합니다.

가/나 이제 문자열을 쓰기 가능 HAL 소스에

감사

답변

6

여러 가지 유닉스 버전에서 작동 할 수있는 휴대용 방식으로이 작업을 수행하려는 경우 사용 가능한 옵션이 거의 없습니다.

호출자 프로세스는 argv [0] 인수가 프로세스 출력에 표시하려는 이름과 실제 실행 파일을 가리키는 파일 이름을 가리키는 exec를 호출해야한다는 것입니다.

사용하여 쉘에서이 동작을 시도 할 수 있습니다 : "This is my cute name"라는 이름의 하나 현재 bash는 프로세스를 대체 할

exec -a "This is my cute name" bash 

.

C에서이 작업을 수행하려면 소스 코드 sendmail 또는 이식 된 다른 소프트웨어를 살펴보고이를 지원하기 위해 운영 체제에 필요한 모든 변형을 찾으십시오.

일부 운영체제에는 setproctitle(3) API가 있으며, 일부 운영체제에서는 argv [0]의 내용을 덮어 쓰고 그 결과를 표시 할 수 있습니다.

+0

안녕하세요 미구엘,이 답변을 주셔서 감사합니다. 주위를 보니 좋은 :) – elmarco

+0

PostgreSQL의 구현은 특히 튼튼한 것 같습니다 : https://github.com/postgres/postgres/blob/71fc49dfe1d99bd83cd99c2e7a39f93e07d19310/src/backend/utils/misc/ps_status.c –

4

argv 포인트를 조사. 그냥 그들에게 물건을 쓰기 :

memset (argv_buffer[0] + len, 0, argv_size - len); 
argv_buffer[1] = NULL; 

모든 좋은 아이디어 :

#include <string.h> 
#include <unistd.h> 

int 
main(int argc, char** argv) 
{ 
    strcpy(argv[0], "Hello, world!"); 
    sleep(10); 
    return 0; 
} 
+0

꽤 못 생겼지 만, 나는 이걸 사용하여 – elmarco

+0

이 잠재적으로 버퍼 오버 플로우가 될 수 있다고 생각한다. 특히 새 문자열이 원래 문자열보다 긴 경우 특히 그렇습니다. 힙에 새로운 문자열을 할당하고이를 argv [0]에 할당하는 것이 더 나을 수 있습니다. –

+1

불행히도 argv [0]에 할당하는 것은 아무 것도하지 않습니다. 그것은 정말로 나의 첫 번째 취향 일 것입니다. –

0

바하마 .. 코드가 좋은하지 않습니다, 트릭 포인터 (argv_buffer 여기)에와 환경을 다시 사용하는 것입니다?

다른 스레드에서 작동합니까?