2016-02-26 77 views
0

不工作我有一個看起來像這樣的文件:擊必殺的睡眠循環

#!/bin/bash 

echo $$ > pid 

while true; do 
    echo "something" 
    sleep 10s 
done | lemonbar 

我希望能夠有這樣的功能來殺死睡眠:

pkill -P $(cat pid) -f "sleep 10s" 

如果我將睡眠移出循環,但上面的命令在循環中不起作用,則上述命令有效。我錯過了什麼?

+0

您確定了父pid,但您沒有告訴'pkill'要殺死哪個子進程。試試'pkill -P $( alvits

+0

@alvits我的不好。我實際上是用'pkill -P $(cat pid)sleep'運行它的。只是在帖子中忘了那部分。 – Marcel

+0

請注意,您沒有使用'-f'。它告訴'pkill'匹配整個命令行,而不僅僅是進程名。 – alvits

回答

0

Bash循環啓動新的進程ID作爲一個孩子。 shell變量$ PPID應該代表父PID。然而,我也讀過你之前的問題,我認爲更好的問題是你真正想要完成什麼?所有這些聞起來都很詭異......

+0

我正在將循環的結果傳遞給lemonbar。我希望它每5秒更新一次,或者每當我點擊一個按鈕時(它將觸發命令以重新啓動循環)。 – Marcel

+0

@Marcel,在你的文章中是10s,但你一直說5s。也許這就是上述編輯在你的情況下從未起作用的原因。也許你試圖殺死'sleep 10s',但你的腳本正在運行'sleep 5s'。因爲上面的代碼在我的linux上工作。 – alvits

+1

@Marcel,請注意,'pkill'sleep 10s「'不會在沒有'-f'的情況下工作,因爲'sleep 10s'不是進程名稱,'sleep'是。 – alvits