我有一个脚本foo ,如果提供参数start ,启动后,除其他事项外的脚本bar的背景和退出- bar包含一个无限循环。

在后一阶段,我想打电话给foo与争论stop ,我想那个脚本bar ,这仍然在后台运行停止运行。

实现这一目标的教科书是什么方式?

#1楼 票数:2 已采纳

如果多个bar实例可以同时运行,并且foo stop应该停止/终止它们,请使用pkill

$ pkill bar

杀死名为bar所有进程。

如果只允许一个bar实例运行,带有“pidfile”的解决方案将是可行的。

foo

pidfile=/var/run/bar.pid

if ((start)); then
    if [ -e "$pidfile" ]; then
        echo "$pidfile exists."
        # clean-up, or simply abort...
        exit 1
    fi
    bar &
    echo $! >"$pidfile"
fi

if ((stop)); then
    if [ ! -e "$pidfile" ]; then
        echo "$pidfile not found."
        exit 1
    fi
    kill "$(<"$pidfile")"
    rm -f "$pidfile"
fi

#2楼 票数:0

有更好的方法可以做你想要做的事情我相信如果你的主机有systemd或initd,那里已经有框架可以使用具有启动/停止功能的长时间运行的作业。

如果你必须独立于那些或其他有用的工具,我会像这样解决它:

当你调用foo start将新生成的bar进程的PID存储在一个文件中时,我们称之为pidfile 这也可以是换行符分隔的PID列表。

当你调用foo stop使用pkill -F pidfile来杀死所有正在运行的进程,其PID与pidfile PID匹配

或者,当您调用foo stop时,可以使用pkill来切换符合特定条件的所有进程的PID。 这可能更容易,但也可能更脆弱。

  ask by user695652 translate from so

未解决问题?本站智能推荐:

6回复

shell脚本中的`kill-0$pid`有什么作用?

基本上,“ 0”代表什么信号,因为在这里我看到的信号编号从1开始。
1回复

如何在Shell脚本中终止“播放”进程?

我正在编写一个脚本,当笔记本电脑的电池电量达到15%时会通知我并播放声音,但问题是,当您插入充电器时,声音会继续播放。 如何从sound.sh脚本中杀死播放过程,或者甚至从batmon.sh脚本中杀死整个sound.sh脚本? 我希望在充电器插入的情况下发生这种情况。但是,我的整个脚本都可
2回复

等待N分钟后终止进程|外壳脚本

我将发布与cron一起使用的sh脚本的一部分,以对Oracle EBIZ进行冷备份。 它大多数时候都能工作,有时会失败,因为脚本监视的进程之一无法停止/终止 代码部分 通常,循环会在3-4分钟内完成,除非FNDLIBR进程之一无法执行 现在,我们需要为上述循环添加最多30分钟的等待
2回复

监视Powershell脚本的挂起实例

我正在编写Powershell脚本来执行很多操作,完成后它将作为计划任务运行。 因此,我希望能够在开始运行脚本时检查旧实例是否仍在运行,并杀死旧实例(如果存在)。 我当时以为我会用这样的东西: 但是如何以一种简单的方式获取$ name变量呢? 有谁有更好的建议? 最好的问候,Gí
3回复

在Bash脚本中终止工作

我有bash脚本,它调用了许多命令,包括TOP命令。 我的问题是如何以编程方式杀死TOP命令并将控制权交还给脚本,以便它可以继续运行? 谢谢
1回复

即使在终止信号之后,bash脚本也会以零状态退出

即使在中断脚本后,我的状态仍然为零。 第一个脚本 备份 当第一个脚本运行时,它返回 0 的退出状态,尽管我试图在它结束之前终止备份脚本(为此我创建了一个非常大的文件,以便 rsync 需要时间来复制文件,我得到了时间在脚本结束之前杀死脚本) 另一件事是,即使在杀死备份脚本之后,rsync 仍然运行。
3回复

终止并重新启动符合特定模式的多个进程

我正在尝试编写一个shell脚本,该脚本将终止正在运行的,符合特定模式的所有进程,然后重新启动它们。 我可以通过以下方式显示过程: 给出了相关事件过程的列表: 但是我不太确定如何传递进程ID来杀死它?
2回复

运行代码一定时间,并在必要时终止

我正在使用脚本桥从可可应用程序中查询iTunes。 有时iTunes会弹出一个窗口(例如ipod需要更新等),而当该弹出窗口打开时,我无法从iTunes获取任何信息。 因此,如果在这种状态下从iTunes请求信息,我的应用程序将完全锁定,直到该弹出窗口被关闭。 所以我需要某种机制,可以在