sudo를 사용하여 다른 프로세스 만들기

sudo를 사용하여 다른 프로세스 만들기

나는 testShell이라는 쉘 스크립트를 작성했습니다. 다음 명령을 사용하여 이 셸을 실행합니다.

sudo sh testShell

그런 다음 사용합니다. ps -ef|grep testShell|grep -v grep

생성된 프로세스를 확인하세요. 나는 시스템이 나를 위해 두 가지 프로세스를 생성했다는 것을 발견했습니다.

imcas@ubuntu:~$ ps -ef|grep testShell|grep -v grep
root      5687 32482  0 11:37 pts/1    00:00:00 sudo sh testShell
root      5688  5687 48 11:37 pts/1    00:00:08 sh testShell

ppid에서 하나는 부모이고 다른 하나는 자식이라는 것을 알고 있습니다. 이제 실행 중인 쉘 스크립트를 종료하고 싶습니다. 나는 무엇을 해야 합니까? 아이를 직접 죽여야 할까요, 아니면 부모를 죽여야 할까요? kill child 를 사용하면 kill -9 5688 자식과 부모가 모두 죽는다는 것을 알았습니다. 하지만 kill parent 를 사용하면 kill -9 5687 부모만 죽게 됩니다. 누구든지 이유를 말해 줄 수 있습니까?

답변1

Linux에서는 상위 프로세스가 종료되면 하위 프로세스가 고아 프로세스가 됩니다. 그러나 "열정적인" init프로세스는 계속되도록 허용하는 고아 프로세스를 채택합니다.

상위 프로세스와 그 하위 프로세스를 종료하려면 다음을 사용할 수 있습니다.

pkill -TERM -P <parent's PID>

(참고: 고아 프로세스는 좀비 프로세스와 동일하지 않지만 이는 또 다른 질문입니다 :-)

답변2

sudo하위 프로세스가 종료되었음을 상위 프로세스( )에 알립니다. 상위 프로세스의 유일한 목적은 하위 프로세스를 실행하는 것이므로 종료됩니다. 하위 프로세스를 종료한다고 해서 다른 프로세스가 종료되지는 않습니다.

반면에 자식 프로세스는 부모 프로세스가 무엇을 하는지 상관하지 않습니다. 상위 프로세스는 하위 프로세스가 생성된 후 즉시 종료될 수도 있습니다. 자식 프로세스 의 종료 코드가 자체 종료 코드로 필요하므로 자식 프로세스가 종료 sudo될 때까지 기다립니다 .sudo

관련 정보