Subject: How can a process detect if it's running in the background? Date: Thu Mar 18 17:16:55 EST 1993
Bsh: if [ -t 0 ]; then ... fi Csh: if(isatty(0)) { ... }一般に、バックグラウンドにいるのかどうかいうことはできません。シェルが 違ったり、UNIX のバージョンが違うと、「フォアグランド」「バックグラウン ド」が意味する概念が違うことが根本的な問題となります。これらが意味する 概念がよりよく定義された最も一般的なシステムでは、プログラムはフォアグ ランド、バックグラウンド間を任意に行き来できます。
ジョブコントロール機能のない UNIX システムは普通、SIGINT と SIGQUIT を 無視し標準入力を /dev/null にリダイレクトすることによってプロセスをバッ クグラウンドにおきます。これはシェルによって行なわれます。
ジョブコントロールをサポートしている UNIX システム上では、シェルはター ミナルが属しているプロセスグループと違うプロセスグループIDを付与するこ とによってプロセスをバックグラウンドにおきます。ジョブコントロールをサ ポートしている UNIX システム上で、ジョブコントロールをサポート "しない" シェルは、通常ジョブコントロールをサポートしないシステムの上でシェルが 行なうのと同じことをしています。