1,首先要淡定。
2,在程序退出之后马上echo $?,获得返回数字R。
3,计算信号码和退出码:
R & 0x7f = signal_no
(R & 0xff00) >> 8 = exit_no
4,这时就知道程序何故退出了。
至于我的状况,就是没有处理SIGPIPE,what a shame.
Add the following code and the app will be fine:
struct sigaction sa;
sa.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &sa, 0);
Why here use sigaction() other than signal() ?
Someone said that in the latter case the designated signal handler may reume the default one when the signal was catched one time, so now you know why sigaction() was a better choice.
本文讨论了在程序退出后如何通过echo $?获取返回数字R,并利用该数字计算信号码和退出码来判断程序为何退出。同时,介绍了如何使用sigaction()而非signal()处理SIGPIPE信号,以避免信号处理器在被捕获一次后重新默认行为的问题。
418

被折叠的 条评论
为什么被折叠?



