これを切り替えることができるスクリプト(ナイトモードアプリ)を作成しようとしていますredshift
。それで私はこうしました。
#!/bin/bash
pgrep redshift > /dev/null && \
killall redshift || \
setsid redshift [options] &> /dev/null
これにより、プログラムがバックグラウンドで実行されている場合は終了し、それ以外の場合は実行中になりますsetsid
。このスクリプトはプロセスを終了すると機能しますが、もう一度実行するとスクリプトがハングします。
- 私は何が間違っていましたか?
- 端末を終了してもプログラムが停止しないようにプロセスをバックグラウンドに配置する他の方法はありますか?
ベストアンサー1
Bashを使用してプログラムを呼び出すと、Bashはそれを&>
ユーザーが望むもの(バックグラウンド演算子とstdoutリダイレクト)ではなく、特別なリダイレクト演算子(stdoutとstderrの両方に&
リダイレクト)として解釈します>
。 2 つのタグを分離すると、予想されるバックグラウンド動作を得ることができます。
#!/bin/bash
pgrep redshift > /dev/null &&
killall redshift ||
setsid redshift [options] & > /dev/null
将来の自分にもっと親切に対処し、論理を少し拡張することを検討してください。それを殺したい場合は、redshift
いくつかのオプションを使用して実行してください。
if pgrep redshift > /dev/null
then
pkill redshift
fi
setsid redshift options & > /dev/null