1
以下是一個腳本來演示我的問題。它的工作原理除了在按ctrl-c時無法退出 - 它退出,但工作函數繼續運行,我必須使用ps grep kill -9來擺脫這個過程。無法捕獲ctrl-c退出函數退出bash腳本
我一直在試驗這個腳本,並發現我不能簡單地殺死工作函數而不從作業控制中去掉「Terminated」消息。所以這就是爲什麼我會陷入SIGPIPE退出該功能的原因。順便說一句,它似乎只與SIGPIPE,但不是SIGINT或INT工作,我不明白爲什麼。無論如何,我還沒有找到一種方法,但如何中止ctrl-c。
謝謝!
#!/bin/bash
bail_out() { unset work; }
ctrl_c() { bail_out; exit; }
working()
{
trap bail_out SIGPIPE
trap ctrl_c INT
echo -n "`tput sc`"
# a='|/- \'
a='.oOo oOo. Oo.o o.oO'
work=1
while [ "$work" ]; do
for i in $a; do
[ "$work" ] && echo -n "`tput rc`Working... $i"
sleep .1
done
done
}
task()
{
count=0
while [ $count -lt "$1" ]; do
ls -l >/dev/null
sleep .5
count=$((count +1))
done
}
working &
task 10
kill -s SIGPIPE %%
echo "`tput rc`task 10 completed"
working &
f_pid=$!
task 11
kill -s SIGPIPE $f_pid
echo "`tput rc`task 11 completed"
輸出:
$ ./working
task 10 completed
task 11 completed
$ ./working
Working... .oOo^C
Working... oOo.
您是否嘗試過使用'-TERM'和' - $$'標誌?在你的'殺死'電話?這殺死了進程和所有的孩子.. IE'kill -TERM - $$' – Zak
也有一些很好的信息:https://superuser.com/questions/243460/what-to-do-when-ctrl-c- cant-kill-a-process – Zak
你的意思是把它放到ctrl_c函數中?是的,但問題似乎是,當按ctr-c時甚至不處理ctrl_c函數。 – Dude