부모 프로세스 만 어떻게 죽일 수 있습니까?


10

다음과 같은 프로세스가 있습니다.

ParentProcess
-ChildProcess
-ChildProcess
-ChildProcess

부모 프로세스 만 어떻게 죽일 수 있습니까? 나는 아이들 프로세스가 죽지 않기를 원합니다. 부모 프로세스를 죽이려고하면 아이들은 SIGHUP을 받고 죽게됩니다.


5
하위 프로세스의 정의가 상위 프로세스와 연관되어 있습니까?
Brad Patton

아마 요 그것은 부모와 연결되어 있습니다.
kcm1700

답변:


8

일반적으로 프로세스가 고아가되면 (즉, 부모가 죽으면) init에 의해 채택됩니다.

설명하는 특수 상황은 제어 터미널이 닫힐 때 ( Wikipedia에서 ) 대화식 프로세스에 적용됩니다 .

SIGHUP 신호는 제어 터미널이 닫힐 때 프로세스로 전송됩니다. 원래 직렬 회선 삭제 프로세스에 알리도록 설계되었습니다. 현대 시스템에서이 신호는 일반적으로 의사 또는 가상 터미널 제어가 닫 혔음을 의미합니다.

이를 방지하려면 하위 프로세스가 SIGHUP을 차단해야하므로 대부분의 경우 상위 프로세스의 협력이 필요합니다.

상위 프로세스가 쉘 ( bash, csh등)이고 bash가 완료 될 때 종료하지 않도록 실행하려는 명령을 원하면 명령 앞에 nohup(from info coreutils "nohup invocation")을 추가 할 수 있습니다 .

'nohup'은 행 아웃 신호를 무시하고 지정된 COMMAND를 실행하므로 로그 아웃 한 후에도 백그라운드에서 명령을 계속 실행할 수 있습니다.

이 예에서 :

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

find쉘이 제어 터미널을 종료하고 닫을 때 종료되지 않습니다 /dev/ttys000.

쉘 스크립트가 SIGHUP을 차단해야하는 경우 여기trap설명 된대로 내장 기능을 사용 하십시오bash .


1
이미 nohup없이 프로세스를 열었습니다. 제안이 있습니까?
kcm1700

내가 아는 한 많이 할 수 없습니다. 프로세스가 실행되면 신호에 반응하는 방식을 변경할 수 없습니다.
jaume

1
nohup에서 이미 실행중인 프로세스를 어떻게 배치합니까? stackoverflow.com/questions/625409/…
PeterVermont
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.