我在用shairport来播放音乐。我在Debian机器(覆盆子)上运行它。在/etc/in it.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并排除它,但我找不到如何做到这一点。

最佳答案

在Linux中,您可以使用$$知道脚本文件运行的进程ID。
你只需要检查一下你不是在用:

stop)
for pid in $(pgrep shairport); do
    if[$pid != $$]
        kill $pid
    fi
done

09-06 08:51