在捕获的SIGUSR1信号内调用ls会导致意外的Shell注销

时间:2019-05-20 05:57:50

标签: bash signals

我正在尝试对有关演讲期间给出的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}
$
  • 在PuTTY和Windows 10控制台中尝试执行此过程,结果相同。
  • 尝试根据Ferrybig在另一个终端中终止该进程。在第二个终端中终止该进程会使我退出第一个终端,哈哈! attempting to kill process in second terminal

谢谢您的时间!

0 个答案:

没有答案