2011-01-05 47 views
0

我想做到以下几点:我可以将进程链接到bash中的文件吗?

我要一个过程链接到文件F,因此:

  • 若F自败一个崩溃。
  • F只会在A完成后消失。

这可能吗?非常感谢你。

+0

如果你说你想什么它可能会帮助去完成。 – 2011-01-05 21:40:21

+0

我想要监视2个进程,因此如果其中一个崩溃,请让另一个崩溃。我读过使用PID来杀死它并不是一个好方法,因为另一个进程可能以相同的PID开始。因此,我正在寻找避免使用PID的方法。 – 2011-01-06 12:39:33

回答

0

你不应该避免PID。它们是进程标识符,并且意在使用。

Bash自动监控它启动的子进程。最新的后台进程ID保存在$!中。 Bash还支持使用'%n'语法的作业控制。

您可以使用陷阱SIGCHLD来捕获子进程状态更改,并且可以等待一个或所有子进程使用wait命令完成。

这里是你的两个过程监控的一个粗略的估计,其中包括“JOB1”和“作业2”正在启动的示例脚本:

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 
0

在Linux上你几乎已经拥有了这个属性的文件。如果您创建了一个进程,那么/ proc/procNum将在进程处于活动状态时存在。举例来说,如果你的进程号是1050,那么/ proc/1050将一直存在,直到进程死亡。我不知道删除这个文件是否会杀死这个进程,但你可以尝试将两者结合在一起。

+0

感谢您的信息!我检查过它,它是一个包含大量文件的目录。我无法删除它(即使我使用sudo),所以我无法做我正在寻找的东西。无论如何谢谢你:) – 2011-01-06 12:30:08

相关问题