Linux环境Perl 5.32.1中,后台system调用进程会在脚本结束后留存吗?
问题解答
在Linux的Perl 5.32.1环境下,用system("rm -rf /disk/rm_this_big_dir >& /dev/null &");这种方式执行后台命令,Perl脚本结束后,这个后台的rm进程会继续运行直到完成目录删除。
原因如下:
- 命令末尾的
&会让shell将该命令放到后台执行,此时shell会启动rm作为自身的子进程,随后shell会立刻退出(因为后台命令启动完成后,shell的任务就结束了)。 - Perl的
system调用本质是启动一个shell来执行指定命令,shell退出后,rm进程会变成“孤儿进程”,被系统的init(或systemd)接管,完全不受Perl脚本退出的影响,会持续运行到任务结束。
补充几个细节:
- 你已经将输出重定向到
/dev/null,这很稳妥,否则后台进程的输出可能会干扰当前终端。 - 这种方式下,Perl脚本无法获取
rm进程的执行状态,也无法在脚本内主动终止它,因为脚本退出时就和该进程失去了关联。
内容的提问来源于stack exchange,提问作者daveg
相关产品推荐
相关产品推荐

