これを切り替えることができるスクリプト(ナイトモードアプリ)を作成しようとしています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
答え2
redshiftには切り替え機能があります
切り替えるには、信号SIGUSR1を赤色片がプロセスに送信します。
pkill -USR1 redshift
記録があります彼らのウェブサイトから、しかしはありませんソフトウェア文書。一つ開いたフルリクエストこの機能はマニュアルページに文書化されています。
答え3
私はGnomeのデスクトップアイコンを切り替えるために使用します。
pkill nemo-desktop || nemo-desktop
もちろん、これは赤い編みにも当てはまります。
pkill redshift || redshift