我有一个 bash 脚本script1
:
#! /bin/bash
evince
和另一个脚本script2
#! /bin/bash
evince &
当我跑步时
./script2
bash 进程在进入evince
后台后立即退出,让evince
进程继续运行。
当我跑步时
./script1 &
bash 进程等待evince
完成运行。
如果我是kill
bash 进程,则 bash 进程将退出并终止该evince
进程。
我想知道为什么 bash 进程的终止不会影响evince
第二个脚本中的进程,但会影响第一个脚本中的进程?
fork(), exit()
您能用系统调用(例如和)来解释一下wait()
吗?
谢谢。
这与为什么这个在后台运行的脚本能够在调用 shell 的“kill”和终止后继续存在?,但这里我想学习基本的一般情况。
答案1
如果您确实只杀死了 shell,那么您应该针对 bash 进行错误报告。
由于现代 shell 自动启用交互式 shell 的作业控制,
./script1&
使用自己的进程组 ID 创建一个新作业。
shell 等待程序evince
,如果您调用:
kill -9 $!
只有 shell 会被杀死并evince
继续运行。
但是,如果您致电:
kill %1
这会杀死整个工作,包括evince
.