[英]How to kill all processes named “shairport” that do not have the pid 12345
我在工作中使用Shairport播放音樂。 我在Debian機器(樹莓派)上運行它。 在其/etc/init.d/shairport文件中,僅包含start | stop命令。 我想添加一個重啟。 這是到目前為止的代碼:
case "$1" in
restart)
service shairport stop
service shairport start
;;
start)
/usr/local/bin/shairport -d -a "$NAME" -p 5002 -k "madafaka" -w -B "mpc stop"
;;
stop)
killall shairport
;;
*)
echo "Usage: /etc/init.d/shairport {start|stop|restart}"
exit 1
;;
esac
exit 0
問題是,當我運行“ service shairport restart”時,該服務將停止,從而運行“ killall shairport”並殺死bash腳本進程本身。 因此,永遠不會執行“開始”。
我如何使killall殺死除當前腳本以外的所有shairport?
我的想法是獲取pid並將其排除,但我找不到解決方法。
起始部分應記下已啟動過程的PID。 像echo $? > /var/run/shairport.pid
echo $? > /var/run/shairport.pid
。
停止腳本的一部分將使用我們創建的.pid文件中的PID,並終止正確的進程。 據我所知,大多數Linux服務都是這樣做的。
在Linux中,您可以使用$ $$知道腳本文件在其下運行的進程ID。
您只需要檢查您是否沒有殺死自己:
stop)
for pid in $(pgrep shairport); do
if[$pid != $$]
kill $pid
fi
done
由於我選擇的答案無法直接使用,因此以下是我最終得到的代碼:
case "$1" in
restart)
for pid in $(pgrep shairport); do
if [ "$pid" != $$ ]; then
kill $pid
fi
done
/usr/local/bin/shairport -d -a "$NAME" -p 5002 -k "madafaka" -w -B "mpc stop"
;;
start)
/usr/local/bin/shairport -d -a "$NAME" -p 5002 -k "madafaka" -w -B "mpc stop"
;;
stop)
killall shairport
;;
*)
echo "Usage: /etc/init.d/shairport {start|stop|restart}"
exit 1
;;
esac
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.