Subject: How can a process detect if it's running in the background?
Date: Thu Mar 18 17:16:55 EST 1993

3.7) あるプロセスがバックグラウンドで動いているかどうか調べるには。

まず最初に: バックグラウンドで実行されてどうか知りたいのですか、それとも、対話的に 実行しているかどうか知りたいのですか。プロンプトを出力するかどうか決め ようとしているとか、その類のことなら、多分後者のほうが良い判断基準で す。標準入力が端末になっているか次のようにして調べましょう。

    
Bsh: if [ -t 0 ]; then ... fi
Csh: if(isatty(0)) { ... }
一般に、バックグラウンドにいるのかどうかいうことはできません。シェルが 違ったり、UNIX のバージョンが違うと、「フォアグランド」「バックグラウン ド」が意味する概念が違うことが根本的な問題となります。これらが意味する 概念がよりよく定義された最も一般的なシステムでは、プログラムはフォアグ ランド、バックグラウンド間を任意に行き来できます。

ジョブコントロール機能のない UNIX システムは普通、SIGINT と SIGQUIT を 無視し標準入力を /dev/null にリダイレクトすることによってプロセスをバッ クグラウンドにおきます。これはシェルによって行なわれます。

ジョブコントロールをサポートしている UNIX システム上では、シェルはター ミナルが属しているプロセスグループと違うプロセスグループIDを付与するこ とによってプロセスをバックグラウンドにおきます。ジョブコントロールをサ ポートしている UNIX システム上で、ジョブコントロールをサポート "しない" シェルは、通常ジョブコントロールをサポートしないシステムの上でシェルが 行なうのと同じことをしています。


UNIX FAQ LIST / Copyright(c)1994,Ted Timar / tmatimar@isgtec.com


Maintainer: あさだ たくや