보통 프로세스 상태를 확인할때 쓰는 ps 명령이 있다.
데몬이라던가 서비스의 상태를 간단하게 표시하고 있어서 좋긴 한데, 프로세스상에서 이 명령을 통해 간단한 상태 정보를 알려줄 수 있다면 매우 유용하게 사용할 수 있다.
FreeBSD 에서의 프로세스 명 변경 닫기.
FreeBSD에서는 이를 위해 setproctitle 이라는 함수를 제공한다.
자세한 스팩은 man 페이지를 참고하고, 간단히 설명하자면 printf 형식의 format output을 제공한다.
이 함수를 통해 ps에 표시되는 정보를 변경해 보자. 간단하게 이런 소스를 만들었다.
#include <sys/types.h>
#include <unistd.h>
main()
{
setproctitle("changed_process");
sleep(100);
}
이 소스를 컴파일하고, 실행한 후에 ps 결과를 살펴보자. (FreeBSD 5.4에서 실행한 결과이다. 다른 버젼의 FreeBSD에서도 실행 결과는 같다.)
elenoa-freebsd# ./a.out &
[1] 97822
elenoa-freebsd# ps -ax | grep changed_process
97822 pc S 0:00.00 a.out: changed_process (a.out)
elenoa-freebsd#
이런 식으로 표시된다.
FreeBSD 에서의 프로세스 명 변경 닫기.
Linux 에서의 프로세스 명 변경 닫기.
Linux에서는?
#include <stdio.h>
#define PNAME "changed_process"
int main(int argc, char *argv[])
{
memcpy(argv[0], PNAME, strlen(PNAME));
*(argv[0] + strlen(PNAME)) = '\0';
sleep(100);
}
argv[0]이 가리키는 시스템 영역에 강제로 원하는 프로세스 이름을 적어넣는 아주 무식한 방법이다. 효과는 있으나, 그리 깔끔해 보이진 않는다. (생각외로 잘 동작한다;)
elenoa# ./a.out &
[1] 17881
elenoa# ps -ax | grep changed_process
17881 pts/9 S 0:00 changed_process
17883 pts/9 S 0:00 grep changed_process
elenoa#
아주 잘 나온다. 하지만..
elenoa# ps
PID TTY TIME CMD
17806 pts/9 00:00:00 bash
17881 pts/9 00:00:00 a.out
17884 pts/9 00:00:00 ps
elenoa#
그냥 ps 명령을 치게 되면 원래 프로세스 명으로 나오게 된다.
Linux 에서의 프로세스 명 변경 닫기.