当一个进程被一个可处理的信号杀死时,例如SIGINT
orSIGTERM
但它不处理该信号,该进程的退出代码是什么?
对于无法处理的信号,例如SIGKILL
?
据我所知,杀死进程SIGINT
可能会导致退出代码130
,但这会因内核或外壳实现而异吗?
$ cat myScript
#!/bin/bash
sleep 5
$ ./myScript
<ctrl-c here>
$ echo $?
130
Run Code Online (Sandbox Code Playgroud)
我不确定如何测试其他信号...
$ ./myScript &
$ killall myScript
$ echo $?
0 # duh, that's the exit code of killall
$ killall -9 myScript
$ echo $?
0 # same problem
Run Code Online (Sandbox Code Playgroud) 我正在尝试执行以下代码:
set -euxo pipefail
yes phrase | make installer
Run Code Online (Sandbox Code Playgroud)
在哪里Makefile
使用phrase
from stdin 创建安装程序文件。但是,此命令以错误代码 141 结尾,这会破坏我的 CI 构建。这个例子可以简化为:
yes | tee >(echo yo)
Run Code Online (Sandbox Code Playgroud)
从这里看到的内容:管道故障 (141) 当管道输出到三通时——为什么?- 这个错误意味着管道消费者刚刚停止消费输出 - 这在我的情况下非常好。
有没有办法抑制管道错误,然后从make installer
?