我可以将进程链接到 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 中的文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

XPC 服务可以链接到嵌入它的框架吗?

Bash 脚本实例:获取符号链接的目标位置

如何链接 2 个进程,以便当一个进程崩溃时另一个进程也崩溃?

如何将多个 onClick 事件链接到 HTML 中的一个元素?我可以让他们改变href吗?

我可以将自动续订订阅链接到应用帐户吗?

SQLite 库可以嵌入(链接)到 Delphi 可执行文件吗?