UbuntuでLinuxターミナルを使用しています。
seq 100 1 | less &
バックグラウンドで実行しようとしたときに停止します。
を使用するなど、バックグラウンドで実行するために他の方法も使用しましたが、ちょうど停止bg [jobnr]
しました。
Job番号を探して書き留めましたがbg 1
(1のとき)プロセスを確認してみると実行にならないですね。
man pi
他の「マンページ」でも同じことが起こります。
ただし、pi 10000000
バックグラウンドで実行でき、完了すると端末にパイ番号が印刷されます。
less
以下は、バックグラウンドで実行できるかどうか、そうでない理由を確認するためのタスクです。オンラインで検索しても原因に関する情報は多くありませんでした。
どちらも端末に印刷しますが、一部のプロセスはバックグラウンドで実行されず、他のプロセスは実行されるのですか?
ベストアンサー1
less
制御端末との対話を試みているため、バックグラウンドで実行できなくなり、強制的に停止します。フォアグラウンドプロセスのみが端末からデータを読み取るか、端末設定を変更できます。
SIGTTOU
バックグラウンドプロセスが端末設定を変更しようとすると、シグナルを受け取ります。端末からデータを読み取ろうとすると信号が届きますSIGTTIN
。両方の信号を停止させます。プロセスが実行され続け、これらのシグナルを無視すると、そのシグナルを発生させた操作が失敗する可能性があるため、これはこの問題に対する解決策ではありません(たとえば、端末からの読み取りがエラーで失敗するなどEIO
)。
メモ:
less
ほとんどのエディタやシェルなどの他の対話型プログラムと同様に、制御端末がstdinまたはstderrであると仮定するのではなく、操作するためにcommand | less
制御端末を直接開くという点でユニークです。/dev/tty
stty tostop
バックグラウンドプログラムが試みるように端末を設定できます。書く制御端末の動作も停止しますが、これはどこでもデフォルト設定ではなく、それほど実用的ではありません。