Ubuntu를 사용하여 명령 백그라운드 프로세스의 상위 프로세스를 종료하여 고아 프로세스를 만들 수 있습니까 sleep 1000
? 가능합니까?
답변1
일반적으로 말하면 - 그렇습니다. 그러나 귀하의 경우 상위 프로세스를 종료한다는 것은 쉘 프로세스를 종료하고 세션을 종료하는 것을 의미하며, 이는 또한 Linux가 모든 하위 프로세스에 SIGHUP 신호를 보내고 닫히게 합니다. 따라서 먼저 nohup으로 명령을 실행할 수 있습니다.
nohup sleep 1000 &
이제 kill로 상위 쉘을 종료할 수 있습니다. 더 좋은 방법은 disown
kill 대신 백그라운드 프로세스 에만 사용하는 것입니다.
답변2
너할 수 없다고아 프로세스는 pid == 1 ()인 프로세스에 의해 즉시 채택되거나 init
Linux의 경우 "subreaper" 프로세스에 의해 채택되므로 고아 프로세스를 만듭니다.
그것이 당신이 원하는 것이라면, (cmd ... &)
.
예:
$ (sleep 9999 &)
$ pgrep -fa 'sleep 9999'
5435 sleep 9999
$ ps -o pid,ppid,cmd 5435
PID PPID CMD
5435 1 sleep 9999
SIGHUP
참고: 세션(예: 세션 리더)이 종료되면 Linux는 다른 응답의 명령문을 잘못된 모든 프로세스에 보냅니다. Linux와 bash는 모두 위의 예에서는 속하지 않는 SIGHUP
선택된 프로세스 하위 집합에만 신호를 보냅니다 .sleep