You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下杀死父进程后如何继续执行Python子进程逻辑?

问题原因

当你杀死父进程后,当前Python进程大概率会收到SIGHUP信号(若父进程是终端会话进程),导致进程直接终止,后续的touch命令根本没机会执行。

解决方案

要让子进程在父进程退出后持续运行,核心是让进程脱离原会话与父进程的控制,以下是两种可行方案:

方案一:用os.fork()创建独立子进程

通过fork创建的子进程,在父进程退出后会被init/systemd收养,完全独立执行后续逻辑:

import os
import psutil
from time import sleep
from subprocess import run
from shlex import split

pid = os.fork()
if pid == 0:
    # 子进程:杀死原父进程,执行后续操作
    psutil.Process(os.getppid()).kill()
    sleep(3)
    run(split('touch /home/tobias/foo'))
else:
    # 父进程直接退出,让子进程独立运行
    os._exit(0)

方案二:忽略SIGHUP信号并脱离终端

在杀死父进程前,先忽略SIGHUP信号,同时让进程脱离终端控制,避免被终端发送的信号终止:

import signal
import psutil
from time import sleep
from subprocess import run
from shlex import split
import os

# 忽略SIGHUP信号
signal.signal(signal.SIGHUP, signal.SIG_IGN)

# 创建新会话,脱离原终端控制
os.setsid()

# 杀死父进程
psutil.Process().parent().kill()
sleep(3)
run(split('touch /home/tobias/foo'))
补充说明
  • os.fork()是Linux/Unix系统专属方法,创建的子进程与父进程完全解耦,父进程退出不影响子进程执行。
  • os.setsid()会生成新的会话组,彻底切断进程与原终端的关联,从根源避免终端发送的SIGHUP信号。

内容的提问来源于stack exchange,提问作者Tobias Feil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:01:10