bash – 即使第一个命令的子进程仍在后台运行,也要关闭管道
发布时间:2020-12-15 21:08:32 所属栏目:安全 来源:网络整理
导读:假设我有test.sh如下.目的是通过此脚本运行一些后台任务,不断更新某些文件.如果后台任务由于某种原因而终止,则应该再次启动它. #!/bin/shif [ -f pidfile ] kill -0 $(cat pidfile); then cat somewhere exitfiwhile true; do echo "something" somewhere sl
假设我有test.sh如下.目的是通过此脚本运行一些后台任务,不断更新某些文件.如果后台任务由于某种原因而终止,则应该再次启动它.
#!/bin/sh if [ -f pidfile ] && kill -0 $(cat pidfile); then cat somewhere exit fi while true; do echo "something" >> somewhere sleep 1 done & echo $! > pidfile 并想把它称为./test.sh |其他程序,例如G. ./test.sh |猫. 管道未关闭,因为后台进程仍然存在并可能产生一些输出.如何告诉管道在test.sh结束时关闭?在调用管道命令之前,有没有比检查pidfile存在更好的方法? 作为变种,我尝试使用#!/ bin / bash并在test.sh的末尾显示,但它仍在等待管道关闭. 我实际上试图实现的目标:我有一个“状态”脚本,它收集各种脚本的输出(正常运行时间,免费,日期,get-xy-from-dbus等),类似于此test.sh.脚本的输出传递给我的窗口管理器,窗口管理器显示它.它也用在我的GNU屏幕底线上. 由于使用的某些脚本可能需要一些时间来创建输出,因此我想将它们从输出集合中分离出来.所以我把它们放在一段时间了;做脚本;睡1;完成循环,如果它还没有运行则启动. 现在的问题是我不知道如何告诉调用脚本“真正”分离守护进程. 解决方法
看看这是否符合您的目的:
(我假设你对while循环中的任何stderr命令不感兴趣.如果你是的话,你会调整代码.:-)) #!/bin/bash if [ -f pidfile ] && kill -0 $(cat pidfile); then cat somewhere exit fi while true; do echo "something" >> somewhere sleep 1 done >/dev/null 2>&1 & echo $! > pidfile (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |