首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何杀死没有pid 12345的所有名为"shairport“的进程

如何杀死没有pid 12345的所有名为"shairport“的进程
EN

Stack Overflow用户
提问于 2015-11-25 09:20:01
回答 3查看 230关注 0票数 0

我正在用shairport在工作中播放音乐。我正在Debian机器上运行它(树莓)。在它的/etc/init.d/shairport文件中,它只有start\\stop命令。我想添加一个重新启动的。以下是目前为止的代码:

代码语言:javascript
复制
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

问题是,当我运行“服务shairport重新启动”时,服务将停止,从而运行"killall shairport“并杀死bash脚本进程本身。所以“开始”永远不会被执行。

如何使killall杀死除当前脚本之外的每个shairport?

我的想法是得到pid,并排除它,但我找不到如何做到这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-25 09:36:35

在linux中,您可以知道脚本文件使用的进程ID:$$

你只需要检查一下你没有用:

代码语言:javascript
复制
stop)
for pid in $(pgrep shairport); do
    if[$pid != $$]
        kill $pid
    fi
done
票数 1
EN

Stack Overflow用户

发布于 2015-11-25 09:35:12

开始部分应该写下已启动进程的PID。像echo $? > /var/run/shairport.pid这样的东西就行了。

停止脚本的一部分将使用我们创建的.pid文件中的PID,并终止正确的进程。据我所知,这是大多数Linux服务所做的事情。

票数 2
EN

Stack Overflow用户

发布于 2015-11-27 11:20:44

由于我所选择的答案并不是开箱即用,下面是我最后得到的代码:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33912618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档