我可以将进程链接到 bash 中的文件吗?
Posted
技术标签:
【中文标题】我可以将进程链接到 bash 中的文件吗?【英文标题】:Can I link a process to a file in bash? 【发布时间】:2011-01-05 17:49:41 【问题描述】:我想做以下事情:
我想将进程 A 链接到文件 F,所以:
如果 F 消失,A 就会崩溃。 F 只会在 A 完成后消失。这可能吗?非常感谢。
【问题讨论】:
如果你说出你想要完成的事情可能会有所帮助。 我想监控 2 个进程,所以如果其中一个崩溃,让另一个也崩溃。我读到用它的 PID 杀死它不是一个好方法,因为另一个进程可以用相同的 PID 启动。因此,我正在寻找一种避免使用 PID 的方法。 【参考方案1】:您不应避免使用 PID。它们是进程标识符,需要使用。
Bash 会自动监控它启动的子进程。最新的后台进程 ID 保存在 $! 中。 Bash 还支持使用 '%n' 语法的作业控制。
您可以使用陷阱 SIGCHLD 捕获子进程状态更改,并且您可以使用 wait 命令“等待”一个或所有子进程完成。
这是您的两个进程监控的粗略近似值,其中包括示例脚本启动的“job1”和“job2”:
job1 & # start job1 in background
j1pid=$! # get its process id
job2 & # start job2 in background
j2pid=$1 # get its process id
trap 'err=1' ERR # trap all errors
err=
wait $j1pid # wait for job1 to complete
# at this point job1 could have completed normally,
# or either process could have had an error
trap - ERR # revert to "normal" handling of most errors
# kill the processes nicely, or abruptly
# kill -TERM sends the TERM signal to the process, which it can trap
# and do whatever pre-exit process is needed.
# kill -9 cannot be trapped.
for pid in $j1pid $j2pid ; do
kill -TERM $pid 2>/dev/null || kill -9 $pid
done
【讨论】:
【参考方案2】:您已经在 Linux 上拥有一个几乎具有此属性的文件。如果您创建了一个进程,则 /proc/procNum 将在该进程处于活动状态时存在。例如,如果您的进程号是 1050,则 /proc/1050 将一直存在,直到进程终止。我不知道删除此文件是否会终止进程,但您可以尝试将两者绑定在一起。
【讨论】:
感谢您提供的信息!我已经检查过了,它是一个包含很多文件的目录。我无法删除它(即使我使用 sudo),所以我无法做我正在寻找的事情。还是谢谢你:)以上是关于我可以将进程链接到 bash 中的文件吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何链接 2 个进程,以便当一个进程崩溃时另一个进程也崩溃?