在bash脚本中,我通常使用陷阱来清理产生的进程: function cleanup()
{
jobs -l
jobs -p | xargs -r -I {} kill -TERM {}
jobs -l
echo "do something after kill all jobs."
}
trap cleanup EXIT 但是,这不适用于进程组: function cleanup()
{
jobs -l
jobs -p | xargs -r -I {} kill -TERM {}
jobs -l
echo
这是我正在使用的脚本,用于在后台运行命令,并在指定的时间段过后计算操作所需的时间。还有一些陷阱会扼杀在后台启动的长时间运行的命令,如果我比计划的更早地杀死主脚本的话。
#!/bin/bash
# DESCRIPTION:
# Run long running command in background for number of seconds
# specified in $TIME_TO_RUN. After this period the function
# 'func_action' will be called
func_trap () {
# FOLLOWI
我有点困惑于:
% vim tmp
zsh: suspended vim tmp
% kill %1
% jobs
[1] + suspended vim tmp
% kill -SIGINT %1
% jobs
[1] + suspended vim tmp
% kill -INT %1
% jobs
[1] + suspended vim tmp
所以我只好“自己动手”,然后想知道为什么以后:
% fg
[1] - continued vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: termi
假设我们有一个在后台运行一些命令的BASH脚本。有时我们想把他们都杀了,不管他们是否已经完成了他们的工作。
下面是一个例子:
function command_doing_nothing () {
sleep 10
echo "I'm done"
}
for (( i = 0; i < 3; i++ )); do
command_doing_nothing &
done
echo "Jobs:"
jobs
sleep 1
# Now we want to kill them
如何杀死在后台运行的3个作业?
我有一个包含以下代码的job dispatcher bash shell脚本:
for (( i=0; i<$toBeDoneNum; i=i+1 ))
do
while true
do
processNum=`ps aux | grep Checking | wc -l`
if [ $processNum -lt $maxProcessNum ]; then
break
fi
echo "Too many processes: Max
如何运行dispy文档name == 'main': import dispy, random cluster = dispy.JobCluster(compute) jobs = [] for i in range(10): # schedule execution of 'compute' on a node (running 'dispynode') # with a parameter (random number in this case) job = cl
我正在尝试在travis-ci服务上构建0ad,并且在没有任何进一步信息的情况下,我随机体验了返回代码137的apt-get install (或apt-get dist-upgrade)的失败。travis-ci基于Ubuntu 12.04。137表示什么?在https://travis-ci.org/krichter722/0ad/jobs/92938434中可以找到一个示例输出。
更多的系统信息。
$ uname -a && lsb_release -a
Linux testing-worker-linux-89e97461-1-15272-linux-4-6969273
我在一个在heroku工人身上运行的rake任务中运行rufus调度程序。我经常得到SIGTERM异常,因为正常的heroku重新启动(请参阅)。在此过程中,我希望实现上述文档中所示的优雅关闭和关闭rufus调度程序:
trap('TERM') do
scheduler.shutdown(:kill)
exit
end
然而,当我试图用这个任务向进程发送SIGTERM时,我得到了错误:
can't be called from trap context
是否有任何方法可以在SIGTERM上优雅地关闭rufus调度程序?我使用ruby 2.0,rake 10.0.
我编写了一个shell脚本来恢复所有挂起的进程。在研究了这些命令之后,我现在得到的是:
#!/bin/bash
for i in `jobs -sp`; do
kill -CONT $i
done
但似乎什么都没发生...我创建了一个永远循环的虚拟shell脚本,运行并停止它。在运行我的shell脚本之后,它不会恢复。为什么会发生这种情况?
我有一个bash主题,它以惰性的方式显示提示符的各个部分。因此,它首先显示一组信息,然后显示延迟加载信息,这些信息需要时间从后台进程加载和重写提示符。
现在,由于延迟加载的呈现是异步的,如果您从当前工作目录移到另一个工作目录,而异步部分没有呈现,我们将在错误的位置得到错误的信息。示例:
异步呈现函数由以下方法调用:
# Check the async side of the prompt if available
set +m
_render_async &
现在,为了防止这种情况发生,我在呈现提示符之前添加了一个检查,以查看是否有任何后台进程等待呈现不在当前目录
按照我用来启动vnc的脚本,
cd $HOME; vncserver -kill :12
cd $HOME; vncserver :12 -geometry 1280x1024 -name myvnc --alwaysshared
当我从终端运行时,它可以工作,但在从cronjob运行时,它会给出错误
从cron启动时vnc的屏幕截图
机器配置
Operating System: Red Hat Enterprise Linux Server 7.6 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.6:GA:server