bash – 在失败时杀死管道中的下一个命令
发布时间:2020-12-16 01:10:34 所属栏目:安全 来源:网络整理
导读:我有一个流式备份脚本,我正在运行如下: ./backup_script.sh | aws s3 cp - s3://bucket/path/to/backup aws命令以原子方式将stdin流式传输到云存储.如果在没有EOF的情况下中断进程,则上载将中止. 我希望如果./backup_script.sh以非零退出代码退出,则会终止a
我有一个流式备份脚本,我正在运行如下:
./backup_script.sh | aws s3 cp - s3://bucket/path/to/backup aws命令以原子方式将stdin流式传输到云存储.如果在没有EOF的情况下中断进程,则上载将中止. 我希望如果./backup_script.sh以非零退出代码退出,则会终止aws进程. 这样做的任何bash技巧? 编辑: #!/usr/bin/env python import signal import sys import functools def signal_handler(signame,signum,frame): print "Got {}".format(signame) sys.exit(0) signal.signal(signal.SIGTERM,functools.partial(signal_handler,'TERM')) signal.signal(signal.SIGINT,'INT')) for i in sys.stdin: pass print "Got EOF" 例: $grep --bla | ./sigoreof.py grep: unrecognized option `--bla' usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] Got EOF 我希望./sigoreof.py以信号终止.
使用进程替换而不是命名管道的简短脚本将是:
#!/bin/bash exec 4> >( ./second-process.sh ) ./first-process.sh >&4 & if ! wait $! ; then echo "error in first process" >&2; kill 0; wait; fi 它与fifo非常相似,基本上使用fd作为IPC的信息载体而不是文件名. 两句话:我不确定是否有必要关闭fd 4;我假设在脚本退出时,shell会关闭所有打开的文件. 而且我无法弄清楚如何在进程替换中获取进程的PID(任何人?至少在我的cygwin上通常的$!没有用.)因此我使用了杀死组中的所有进程,这可能是不可取(但我不完全确定语义). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |