我正在尝试对有关演讲期间给出的bash脚本信号陷阱的示例进行故障排除。我将代码复制粘贴到脚本中,但是我执行代码最终导致意外退出。讲师没有提到这种情况可能发生,而且我印象中不应该这样。但是,在未能与我的助教和同学联系之后,我求助于您!
我正在查看的完整幻灯片可以在第15页上找到:http://web.engr.oregonstate.edu/~brewsteb/CS344Slides/3.3%20Signals.pdf
预期产量:
Triggering a child process termination with a silent ls SIGCHLD Received!
Exiting! [1]+ Done sigchldtest
实际输出:
Triggering a child process termination with a silent ls
os1 ~/344_operating_systems/examples 1062$ SIGCHLD Received! Exiting!
logout
脚本sigchldtest:
#!/bin/bash
set -m trap "echo 'Triggering a child process termination with a silent ls'; ls > /dev/null" USR1
trap "echo 'SIGCHLD Received! Exiting!'; exit 0" CHLD
while [ 1 -eq 1 ]
do
echo "nothing" > /dev/null
done
控制台输入:
sigchldtest &
kill -SIGUSR1 [sigchldtest pID]
从第3行中删除了“ ls> / dev / null”。代码将按预期执行,但不会触发CHLD信号陷阱。
从第4行删除了“ exit 0”。Shell不会在完成后注销,但是用户必须按“ enter”键返回到命令提示符,脚本继续在后台运行(不需要)。此外,不应在“收到SIGCHLD!”之前打印路径名。看来在我的脚本中间,shell提示正在被激活?
Triggering a child process termination with a silent ls
os1 ~/344_operating_systems/examples 1010$ SIGCHLD Received! Exiting!
{USER MUST PRESS ENTER HERE}
$
谢谢您的时间!