sh
1#!/bin/sh 2echo 'c.sh' 3 4term() { 5 jobs -p 6 jobs=$(jobs -p) 7 echo ${jobs} 8 kill ${jobs} 9} 10trap 'term' 1 2 3 15 11 12tail -f hoge | 13while read l; do 14 date 15 sleep 1 16done & 17 18wait
このシェルスクリプトを起動すると、以下のようにプロセスが立ち上がります。
shell
1$ ps -ao pid,ppid,pgid,command 2 PID PPID PGID COMMAND 3 1740 1469 1740 /bin/sh ./c.sh 4 1741 1740 1740 tail -f hoge 5 1742 1740 1740 /bin/sh ./c.sh
BSD(macOS, FreeBSD)の場合はkill 1740
すると、コンソールには
1741 1741
と表示されて、1741
1742
も終了してくれるのですが、Linuxの場合は
1741 ./c.sh: 8: kill: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or kill -l [exitstatus]
1741
1742
が終了せず残り続けています。
BSDだとtrapの中で実行したjobs -p
の結果を変数に格納できているのですが、Linuxだとできていないです。
なにがいけないのかよくわからず困っています。
ご助言いただけると幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。