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

退出终端后子进程仍运行?dd进程PPID变更及父子进程终止疑问

终端退出后子进程存活相关问题解答

1. 为什么退出终端窗口后子进程还在运行?

这核心在于进程会话关系和信号处理机制:

  • 你在终端里启动的进程(比如dd),默认会以终端shell(bash/zsh等)作为父进程,并且同属于一个终端会话。
  • 当关闭终端时,shell进程会收到SIGHUP信号并退出,同时系统会把这个信号发送给会话内的所有子进程,默认情况下子进程收到SIGHUP会终止。
  • 但如果子进程被配置为忽略SIGHUP信号(比如用nohup dd ... &启动),或者进程本身已经脱离了终端会话的控制,那它就不会被这个信号终止,会继续在后台运行。

2. 执行dd后关终端,dd仍运行且PPID变了,发生了什么?杀死父进程一定会终止子进程吗?

dd进程的变化:

当终端shell(dd的父进程)退出后,dd就成了孤儿进程——没有父进程的进程。Linux系统里的初始化进程(现在一般是systemd,PID固定为1;早期是init)会自动接管所有孤儿进程,所以你会看到dd的PPID变成了1,这就是它被PID1进程收养了。

杀死父进程≠终止子进程:

完全不是!父进程和子进程是独立的执行实体,父进程的退出不会直接导致子进程终止,除非这两种情况:

  • 父进程在退出前主动给子进程发了终止信号(比如SIGTERM);
  • 子进程的运行完全依赖父进程提供的资源(比如父进程是子进程的唯一数据源,这种场景很少见)。

像dd这种做磁盘读写的进程,它的运行不依赖终端或父进程,所以即使父进程挂了,它该干嘛干嘛,直到完成I/O任务或者收到其他终止信号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:11:31