- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Bash 脚本(Bash 3.2,Mac OS X 10.8)可以并行调用多个 Python 脚本,以便更好地利用多个内核。每个 Python 脚本都需要很长时间才能完成。
问题是,如果我在 Bash 脚本中间按下 Ctrl+C,Python 脚本实际上并没有被杀死。我如何编写 Bash 脚本,以便杀死它也会杀死它的所有背景 child ?
这是我原来的“简化测试用例”。不幸的是,我似乎已经将它减少了太多,以至于它不再显示问题;我的错误。
set -e
cat >work.py <<EOF
import sys, time
for i in range(10):
time.sleep(1)
print "Tick from", sys.argv[1]
EOF
function process {
python ./work.py $1 &
}
process one
process two
wait
这是一个完整的测试用例,仍然高度简化,但希望这个能证明问题。它在我的机器上重现了...但是,两天前我认为旧测试用例在我的机器上重现了,而今天它肯定没有。
#!/bin/bash -e
set -x
cat >work.sh <<EOF
for i in 0 1 2 3 4 5 6 7 8 9; do
sleep 1; echo "still going"
done
EOF
chmod +x work.sh
function kill_all_jobs { jobs -p | xargs kill; }
trap kill_all_jobs SIGINT
function process {
./work.sh $1
}
process one &
wait $!
echo "All done!"
此代码继续打印 still going
即使在 Ctrl+C 之后也是如此。但是,如果我将 &
从外部 process
移动到内部(即:./work.sh $1 &
),则 Ctrl+C 用作预期的。我完全不明白这个!
在我的真实脚本中,process
包含多个命令,而且命令都是长时间运行的,必须按顺序运行;所以我不知道在那种情况下如何“将 &
移动到 process
中”。我确信这是可能的,但它必须非常重要。
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
编辑:非常感谢@AlanCurry 教我一些 Bash 知识。不幸的是,我仍然不明白我的示例中到底发生了什么,但这实际上是一个有争议的问题,正如 Alan 也 很有帮助地指出的那样,对于我的实际并行化问题,Bash 是错误的工具并且我应该使用带有 make -j3
的简单 makefile! make
在可能的情况下并行运行,并且完全理解 Ctrl+C;问题已解决(即使问题未得到解答)。
最佳答案
我明白了!您所要做的就是摆脱那个 python SIGINT 处理程序。
cat >work.py <<'EOF'
import sys, time, signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
for i in range(10):
time.sleep(1)
print "Tick from", sys.argv[1]
EOF
chmod +x work.py
function process {
python ./work.py $1
}
process one &
wait $!
echo "All done!"
关于Bash 脚本在 Ctrl+C 上杀死背景(孙)子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11696691/
file.xml 示例。 我更喜欢使用elementtree来解析。根节点获取为 tree=xml.etree.El
有什么好的方法可以直接将 SIGUSR 发送给孙子?例如。我有一些进程树: 0 / \ 1 2 \ 3 并且需要从0发送一个信号到3。 我
我正在使用lxml ,使用html库的模块。 如何获取包含具有某些特征的元素的元素? 例如: Welcome other Bye Bye another 如何选择 包含 Wel
我将直接切入,简短且具有描述性: C++、Windows API 我正在使用 CreateProcess 创建子进程以运行外部(命令行)应用程序。我已经建立了超时,如果到那时子进程还没有返回正常执行,
我有一个 XML 需要解析,这对我来说非常棘手。 1234 FOO ... 我想遍历此 XML 并在 b
我有一个父 div,单击它会显示一个子 div,再次单击父 div 将切换该子 div 并再次隐藏它。我在那个子 div 中有一个开关切换,它将在场景后面用作复选框。我的代码的问题是,当我点击那个开关
我有一个这样的数据路径 events -KntTJCVBtbrb79dHemC dateStamp: 1498747689858 admin: "rPxwIzE
我正在寻找一种将属性更改事件从孙子级传播到其父级的正确方法。假设我们有一些树结构,当其中一个叶子的某些属性发生变化时,应该通知这棵树的根。我想,一种方法是将属性更改监听器从节点添加到其子节点,然后将事
我有一个 Bash 脚本(Bash 3.2,Mac OS X 10.8)可以并行调用多个 Python 脚本,以便更好地利用多个内核。每个 Python 脚本都需要很长时间才能完成。 问题是,如果我在
我有一个名为 Device 的对象。 Device 可以有一个父 Device。一个 Device 也可以有 n 个子 Devices。 我有一个下拉列表,其中显示了所有可选择的设备。我可以很容易地获
我正在尝试使用此 cron 作业每隔一周运行一个脚本。 (/ect/crontab) 45 8 * * mon root expr `date +%U` % 2 >/dev/null || /home
我正在从事 Backbone/Marionette 项目。该项目实现了一种在从服务器加载数据后将数据缓存在本地内存中的方法。因此,可以在项目内随时随地访问数据。 这让我想知道在我的案例中填充数据以查看
我是一名优秀的程序员,十分优秀!