我可以将进程链接到bash中的文件吗?

时间:2011-01-05 17:49:42

标签: bash process ipc

我想做以下事情:

我想将进程A链接到文件F,所以:

  • 如果F消失A崩溃。
  • F只会在A结束时消失。

这可能吗?非常感谢你。

2 个答案:

答案 0 :(得分:0)

你已经在Linux上拥有了几乎所有这个属性的文件。如果您创建了一个进程,则进程处于活动状态时将存在/ proc / procNum。例如,如果您的进程号为1050,则/ proc / 1050将一直存在,直到进程终止。我不知道删除此文件是否会终止该过程,但您可以尝试将两者绑定在一起。

答案 1 :(得分:0)

你不应该避免使用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