我正在尝试制作一个可以切换的脚本redshift
(夜间模式应用程序)。所以,我做到了,
#!/bin/bash
pgrep redshift > /dev/null && \
killall redshift || \
setsid redshift [options] &> /dev/null
这会查找程序,如果该程序在后台运行,则将其终止,否则将启动并运行setsid
. 现在,如果我要终止进程,这个脚本就可以工作,但是当我运行它时,这个脚本会挂起。
- 我究竟做错了什么?
- 是否有其他方法可以将进程置于后台,以便杀死终端不会停止程序?
当您使用 bash 调用程序时,bash 解释
&>
为特殊的重定向运算符(重定向 stdout 和 stderr),而不是您可能想要的:后台运算符&
和 stdout 重定向>
。将这两个标记分开,您将获得您期望的背景行为:考虑善待未来的自己,稍微扩展逻辑;如果它在那里,你想杀死
redshift
它,然后用一些选项开始它:redshift 有一个切换功能
向红移进程发送信号 SIGUSR1 以进行切换:
它记录在他们的网站上,但不在软件文档中。我已经打开了一个拉取请求以在其手册页中记录此功能。