当一个进程被一个可处理的信号杀死时,例如SIGINTorSIGTERM但它不处理该信号,该进程的退出代码是什么?
对于无法处理的信号,例如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) 在我的终端中,它打印出一个看似随机的数字127。我认为它正在打印一些变量的值并检查我的怀疑,我定义了一个新变量v=4。echo $?再次运行给了我0作为输出。
我很困惑,因为我期待 4 是答案。
如果一个进程运行并退出它返回一个非零状态(我个人更喜欢术语返回代码);甚至零状态我知道该值在那里(主要是因为我已经完成了 C++ 编程并且我知道你可以在你的main()方法结束时返回一个值......但也因为如果我运行类似的东西:
fuser -s ./myfile.txt && echo "a process is accessing your file”
我知道echo如果从fuser进程返回的状态值是0,则唯一打印,如果不是,echo则一起跳过,因为:
“如果没有访问任何指定文件或发生致命错误,fuser 将返回一个非零返回码。”
现在我如何显示这个返回码来知道它的价值?因为如果你正在运行fuser使用-silent,如在脚本,它似乎重要的是知道的返回码/状态值,所以我可以告诉大家,不被访问文件和实际致命错误之间的区别。
此外,手册页中是否有一个共同的地方记录了进程的返回代码/状态,以便我可以看到该值可能意味着什么?或者是否有一份文件对返回代码应该是什么有标准?
exit-status ×2
command-line ×1
exit ×1
fuser ×1
kill ×1
linux ×1
process ×1
shell ×1
signals ×1