提出了一个单行方法来从bash命令行超时长时间运行的命令:
( /path/to/slow command with options ) & sleep 5 ; kill $!
Run Code Online (Sandbox Code Playgroud)
但是,给定的"长时间运行"命令可能比超时更早完成.(我们称之为"通常长时间运行但有时快速"的命令,或者称为tlrbsf.)
所以这种漂亮的1-liner方法有几个问题.首先,sleep它不是有条件的,因此在序列完成所花费的时间上设置了不希望的下限.当tlrbsf命令在2秒内完成时,考虑30s或2m甚至5m的睡眠- 非常不受欢迎.其次,它kill是无条件的,所以这个序列将试图杀死一个非运行的进程并发出呜呜声.
所以...
有没有办法超时通常长时间运行但有时快("tlrbsf")命令
...对于奖励积分,在前台运行tlrbsf命令,在后台运行任何"睡眠"或额外进程,这样tlrbsf命令的stdin/stdout/stderr 可以被重定向,就像它曾经被重定向一样直接跑吗?
如果是这样,请分享您的代码.如果没有,请解释原因.
我花了一段时间试图破解前面提到的例子,但我正在达到我的bash技能的极限.
如何杀死linux中最后生成的后台任务?
例:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Run Code Online (Sandbox Code Playgroud) 我已经看过监视程序,无论是在脚本中,使用'ps'或'服务状态(在Linux上)'定期检查进程状态,还是在C/C++中分析并等待进程...
我想知道是否有可能使用带有陷阱的bash并在收到SIGCLD时重新启动子进程?
我已经在RedHat Linux上测试了一个带有以下想法的基本套件(当然它没有用......)
#!/bin/bash
set -o monitor # can someone explain this? discussion on Internet say this is needed
trap startProcess SIGCHLD
startProcess() {
/path/to/another/bash/script.sh & # the one to restart
while [ 1 ]
do
sleep 60
done
}
startProcess
Run Code Online (Sandbox Code Playgroud)
什么bash脚本启动只是睡了几秒钟然后退出.
观察到几个问题:
......无论如何,这根本不起作用.我不得不说我对这个话题知之甚少.有人可以建议或提供一些有用的例子吗?是否有这样的脚本?
那么在bash中使用等待怎么样?
谢谢
我基本上想在新进程组中运行一个脚本(调用更多脚本),以便我可以向脚本调用的所有进程发送信号.
在Linux中,我发现setsid可以帮助我做到这一点,但这在FreeBSD上是不可用的.
setsid的语法(由util-linux-ng提供).
setsid /path/to/myscript
Run Code Online (Sandbox Code Playgroud)
然而,我了解到会话和进程组不一样.但是开始一个新的会议也解决了我的问题.