bash의 좀비


11

배쉬는 좀비를 만들지 않는 것 같습니다. 프로세스가 종료되면 즉시 처리되는 것처럼 보입니다.

bash가 좀비를 만들 수 있습니까?


내가 묻는 이유 :

자식 프로세스를 안전하게 종료하거나 kill -9특정 시간 내에 죽지 않으면 안전하게 프로세스 를 종료하고 싶지만 실수로 자식 프로세스가 아닌 프로세스를 짤리 게하고 싶지 않습니다. 좀비 프로세스는 일반적으로 매우 쉽고 경쟁 조건이 안전합니다.


1
어쩌면 또 다른 아이디어는 ... 외부 프로세스를 죽이지 않도록 보호하려면 cgroup을 확인하십시오. unshare해당 프로세스 트리 내에서 외부 프로세스를 격리하고 액세스 할 수 없도록 PID 네임 스페이스를 작성하도록 호출하십시오 .
오리온

회피하려는 대신 작업 제어를 사용하십시오 ( 작업 번호가있는 kill -KILL %n위치 등 n).
명목 동물

좋은 질문입니다! "왜 물어 timeout보는가 "에 대한 다른 접근법 : 명령 을 고려 했습니까?
와일드 카드

답변:


13

좀비 프로세스를 만들려면

$ (sleep 1 & exec /bin/sleep 10)

이 실행 쉘 교체 sleep 1/bin/sleep 10알고하지 않을 것이다 sleep 1그래서 10 초 동안 좀비를 만드는 프로세스가 종료합니다.


좀비 프로세스를 죽이면 어떤 결과가 나올지 잘 모르겠습니다. 좀비 프로세스가 이미 종료되었으므로 죽일 수 없습니다.

실제로 좀비 프로세스를 사라지게 할 수 있지만 좀비 프로세스 자체가 아니라 부모를 종료하면됩니다.


수확 된 PID는 재활용됩니다. 좀비의 요점은 부모가 자식을 기다리면서 자식의 죽음을 인정할 때까지 PID를 예약한다는 것입니다. 이것이 없으면 pid를 죽이면 우연히 희생자가 될 수 있습니다.
PSkocik

1
C에서는 아이를 기다릴 때까지 아이의 PID를 재활용 할 수 없기 때문에 아이를 죽일 때 우연히 피해자가되지 않도록 할 수 있습니다. 쉘에서 동일한 보증을 받고 싶습니다.
PSkocik

3

그리 흥미로운 답변은 아닙니다.

$ (A=$BASHPID && ( kill -STOP $A ))

[1]+  Stopped                 ( A=$BASHPID && ( kill -STOP $A ) )

$ ps -C bash
  PID TTY          TIME CMD
29453 pts/0    00:00:00 bash
29593 pts/0    00:00:00 bash
29594 pts/0    00:00:00 bash <defunct>

좀비 프로세스는 어떻습니까? 방금 멈 췄어 또한 $BASHPID이다 $$나는 생각한다.
Gabor Csardi

$BASHPID 있다 없다 그 같은 $$. 다음 코드를 시도하십시오 : echo $$ $BASHPID ;echo $(echo $$ $BASHPID). 에서 자세한 정보를 찾을 수 있습니다 man bash.
Alex Baranowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.