Если вы работаете в системе Unix, вы можете использовать os.fork :
import os
import time
pid=os.fork()
if pid:
# parent
while True:
print("I'm the parent")
time.sleep(0.5)
else:
# child
while True:
print("I'm just a child")
time.sleep(0.5)
При запуске этого процесса создаются два процесса.Вы можете убить родителя, не убивая ребенка.Например, когда вы запустите скрипт, вы увидите что-то вроде:
% script.py
I'm the parent
I'm just a child
I'm the parent
I'm just a child
...
Остановите скрипт с помощью ctrl-Z:
^Z
[1]+ Stopped script.py
Найдите идентификационный номер процесса для родителя.Это будет меньшее из двух номеров идентификаторов процесса, так как родительский процесс пришел первым:
% ps axuw | grep script.py
unutbu 6826 0.1 0.1 33792 6388 pts/24 T 15:09 0:00 python /home/unutbu/pybin/script.py
unutbu 6827 0.0 0.1 33792 4352 pts/24 T 15:09 0:00 python /home/unutbu/pybin/script.py
unutbu 6832 0.0 0.0 17472 952 pts/24 S+ 15:09 0:00 grep --color=auto script.py
Убить родительский процесс:
% kill 6826
Восстановить script.py на переднем плане:
% fg
script.py
Terminated
Вы увидите, что дочерний процесс все еще выполняется:
% I'm just a child
I'm just a child
I'm just a child
...
Убейте ребенка (в новом терминале) с помощью
% kill 6827