데몬프로세스 같은 거 죽일 때 프로세스아이디를 쳐야 하는데요. 힘들게 그렇게 하지말고, sh를 사용해서 해봅시다.

항상 올리고 내리는 데몬 프로그램이라면 스크립트로 제작해야합니다.










프로세스 확인하기 (Language : text)
[oracle][/home/oracle/mudchobo] ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   27537 27536  0 10:33 pts/4    00:00:00 -csh
oracle   27639     1  0 10:37 pts/4    00:00:00 fork_daemon
oracle   27641     1  0 10:37 pts/4    00:00:00 another
oracle   27674 27537  0 10:40 pts/4    00:00:00 ps -f
[oracle][/home/oracle/mudchobo]

우선 ps -f를 쳐보니 2개의 데몬프로세스가 실행되고 있습니다. 이것을 프로세스명은 항상 동일하기 때문에 프로세스 명으로 죽여봅시다.

kill_daemon.sh (Language : text)
ps -f | egrep "daemon|another" | grep -v grep | awk '{printf( "kill -TERM %s\n", $2); }' > tmp.$$
sh tmp.$$
rm -f tmp.$$

우선 ps -f를 이용하여 프로세스를 출력한 뒤 daemon과 another를 검색합니다. egrep는 grep의 확장명령어로 정규식을 지원합니다. 여러개의 프로세스를 죽이려면 저렇게 |를 이용하여 추가할 수 있습니다.

그다음 grep -v grep를 이용하여 현재 수행되고 있는 grep명령어는 빼줍니다. -v옵션은 해당 단어는 빼고 검색하라는 겁니다.

그다음 awk입니다. ps -f해서 다음과 같이 나오면 $1, $2 라고 쓰면 oracle, 27639를 가져옵니다. 스페이스공백이 분리자로 작용을 하게 되어서 프로세스 아이디를 얻을 수 있습니다.
oracle   27639     1  0 10:37 pts/4    00:00:00 fork_daemon

저것은 그냥 출력만 하는 것이기 때문에 파일에 저장해서 스크립트를 실행해줘야 합니다. tmp에 저장 후 sh를 이용하여 실행한 뒤 생성된 tmp파일은 rm으로 지워버립니다.

kill_daemon (Language : text)
[oracle][/home/oracle/mudchobo] ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   27537 27536  0 10:33 pts/4    00:00:00 -csh
oracle   27639     1  0 10:37 pts/4    00:00:00 fork_daemon
oracle   27641     1  0 10:37 pts/4    00:00:00 another
oracle   27756 27537  0 10:45 pts/4    00:00:00 ps -f
[oracle][/home/oracle/mudchobo] kill_daemon.sh
Terminated
[oracle][/home/oracle/mudchobo] ps
  PID TTY          TIME CMD
27537 pts/4    00:00:00 csh
27768 pts/4    00:00:00 ps
[oracle][/home/oracle/mudchobo]


 
Posted by 머드초보
,