Normalerweise sollte das Kind Sie Folk nicht getötet werden, wenn es sich Eltern getötet, es sei denn, Sie möchten etwas tun: How to make child process die after parent exits?
Wenn die Eltern getötet wird, werden die Kinder ein Kinder der init verarbeiten. Sie haben wahrscheinlich am Terminal gesehen, dass der Prozess unmittelbar nach dem Senden von KILL an die Eltern zurückkehrt. Das liegt daran, dass die Sub-Bash nur auf die PID der Eltern wartet. Aber das Kind läuft eigentlich woanders hin.
Hier ist ein Beispiel, es zu zeigen:
#!/usr/bin/env python
# test_parent_child_kill.py
import os
import time
def child():
print "Child process with PID= %d"%os.getpid()
time.sleep(20)
def parent():
print "Parent process with PID= %d"%os.getpid()
newRef=os.fork()
if newRef==0:
child()
else:
print "Parent process and our child process has PID= %d"%newRef
time.sleep(20)
parent()
Dann im Schlafperiode:
[email protected]:/tmp|⇒ python test_parent_child_kill.py
Parent process with PID= 17430
Parent process and our child process has PID= 17431
Child process with PID= 17431
[email protected]:/tmp|⇒ kill 17430
[email protected]:/tmp|⇒ ps -ef | grep 17431
503 17431 1 0 9:30PM ttys000 0:00.00 /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python test_parent_child_kill.py
So das Kind tatsächlich noch am Leben ist.
--Edit--
- Warum, wenn die Eltern mein Programm getötet wird beendet mit der Schale zurück?
Bash ruft den Befehl auch über Folk/exec über diese so etwas wie:
childPid = fork();
if (childPid == 0){
executeCommand(cmd); //calls execvp
} else {
if (isBackgroundJob(cmd)){
record in list of background jobs
} else {
waitpid (childPid);
}
}
Da aus Sicht der bash, die Eltern des Programms ist das Kind, würde es zurückgeben Eingabe aufzufordern, wenn es kommt von waitpid(childPid)
zurück.
- Gibt es eine Möglichkeit, innerhalb des Programms zu bleiben und weiterhin so zu arbeiten, wie es war, aber mit einem neuen Elternteil?
Es könnte ein bisschen schwierig sein, wenn Sie "re-attach" wollen, aber es ist nicht unmöglich:
Attach to a processes output for viewing
https://unix.stackexchange.com/questions/58550/how-to-view-the-output-of-a-running-process-in-another-bash-session
Referenz:
http://www.cs.cornell.edu/Courses/cs414/2004su/homework/shell/shell.html
Wenn Sie "ersetzt" sagen, meinen Sie, ausgetauscht oder ersetzt durch eins Ein weiterer? – PseudoAj
Das aktuelle Kind (zum Zeitpunkt des Todes des Elternteils) muss ein anderes Kind austeilen und somit zum Elternteil werden und die elterlichen Pflichten des vorherigen Elternteils fortführen. Der neue Parent kann die gleiche PID wie der vorherige Parent haben, oder er kann die PID behalten, die er als Kind hatte. Macht nichts. –
Zur Klarstellung ist der andere Fall, wenn nur das Kind sterben würde. In diesem Fall muss der Elternteil einfach ein neues Kind ausformen.Dieser Teil meines Programms funktioniert ordnungsgemäß. –