6    プロセスの使用

この章では,オペレーティング・システムのプロセスについて説明します。 この章では次のような項目について説明します。

この章で説明する例に従って実際に操作することにより,上記のトピックについて理解することができます。 画面に表示される情報が本書の説明と一致するように,必ずすべての例を実行してください。

6.1    プログラムとプロセス

プログラムとは,コンピュータが解釈して実行することのできる命令の集合です。 ほとんどのプログラムは,次の 2 つのカテゴリのどちらかに含まれます。

プログラムは,実行されている間はプロセスと呼ばれます。 オペレーティング・システムはすべてのプロセスに,プロセス識別子 (PID) と呼ばれる一意の番号を割り当てます。

オペレーティング・システムでは,複数の異なるプロセスを同時に実行することができます。 複数のプロセスを実行しているときは,オペレーティング・システムに組み込まれているスケジューラが,設定されている優先順位に基づいて,各プロセスに対しコンピュータ時間の公正な割り当てを行います。

6.2    標準入力,出力,およびエラー

プロセスが実行を開始すると,オペレーティング・システムはそのプロセスのために 3 つのファイル,stdin (標準入力),stdout (標準出力),および stderr (標準エラー) をオープンします。 プログラムはこれらのファイルを次のように使用します。

たいていの場合は,省略時の標準入力,標準出力,および標準エラーで十分ですが,標準入力,標準出力,および標準エラーをリダイレクトするほうが便利な場合があります。 以降の各項で,これらの手順について説明します。

6.2.1    入力と出力のリダイレクト

コマンドは通常,キーボード (標準入力) から入力を読み取り,ディスプレイ (標準出力) に出力を書き込みます。 しかし場合によっては,コマンドに,ファイルから入力を読み取らせたり,ファイルに出力を書き込ませたり,あるいはその両方を行わせたいこともあるでしょう。 表 6-1 に示すシェル表記を使用すると,コマンドに対する入力ファイルと出力ファイルを選択することができます。 この表記はすべてのシェルで使用できます。

表 6-1:  入力読み取りと出力リダイレクトのためのシェル表記

表記 作業
< ファイルから標準入力を読み取る。 wc < file3
> ファイルに標準出力を書き込む。 ls > file3
>> ファイルの終わりに標準出力を追加する。 ls >> file3

以降の項で,ファイルから入力を読み取る方法と,ファイルに出力を書き込む方法について説明します。

6.2.1.1    ファイルからの入力の読み取り

すべてのシェルで,プロセスの標準入力をリダイレクトして,入力をキーボードからではなくファイルから読み取るようにすることができます。

入力リダイレクションは,stdin (ユーザのキーボード) からの入力を受け入れるコマンドであれば,どんなコマンドとも使用することができます。 who などの入力を受け入れないコマンドでは,入力リダイレクションは使用できません。

入力をリダイレクトするには,左山カッコ (<) を次の例のように使用します。

$ wc < file3
      3      27     129
$
 

wc (word count) コマンドは指定されたファイル内の行数,ワード数,およびバイト数をカウントします。 したがって,file3 には 3 行,27 ワード,129 バイトが含まれています。 引数を指定しなければ,wc コマンドはキーボードからの入力を読み取ります。 この例では,wc の入力は file3 という名前のファイルから読み取られています。

なお,次のように入力しても,同じ出力を表示させることができます。

wc file3
 

これは,ほとんどのコマンドでは,< を使用しなくても入力ファイルを指定できるからです。

ただし,mail のように,特殊機能のために < の使用を要求するコマンドも少数ながらあります。 たとえば,次のコマンドに注意してください。

$ mail juan < report
 

このコマンドは,ユーザ juan にファイル report をメールします。 メールについての詳細は, mail(1) リファレンス・ページを参照してください。

6.2.1.2    出力のリダイレクト

すべてのシェルで,プロセスの標準出力を画面 (省略時の出力) からファイルにリダイレクトすることができます。 この結果,コマンドによって生成されたテキストを新しいファイルまたは既存のファイルに格納することができます。

出力をファイルに送るには,1 つまたは 2 つの右山カッコ (> または >>) を使用します。

> を使用した場合,シェルは次のことを行います。

>> は,コマンドの出力を既存のファイルの終わりに追加 (付加) します。 ファイルが存在しない場合は,シェルはコマンドの出力を内容とするファイルを作成します。

次の例では,ls の出力は file という名前のファイルに書き込まれます。

$ ls > file
$
 

このファイルがすでに存在する場合,シェルはその内容を ls の出力に置き換えます。 file が存在しない場合は,シェルはそのファイルを作成します。

次の例では,シェルは ls の出力を file という名前のファイルの終わりに追加します。

$ ls >> file
$
 

file が存在しない場合,シェルはそのファイルを作成します。

プロセスは標準出力のほかに,診断出力と呼ばれるエラー・メッセージや状態メッセージを出力することがよくあります。 診断出力のリダイレクションについては,次の項を参照してください。

6.2.2    標準エラーのファイルへのリダイレクト

コマンドの実行が成功すると,その結果が標準出力に表示されます。 コマンドの実行が成功しなかった場合は,省略時の標準エラー・ファイル,つまり画面にエラー・メッセージが表示されます。 しかし,シェルは,プロセスの標準エラーを画面からファイルにリダイレクトすることができます。

リダイレクションの記号と構文はシェルによって異なります。 以降の各項で,Korn および POSIX シェルおよび C シェルにおける標準エラーのリダイレクションについて説明します。

6.2.2.1    Bourne シェル,Korn シェル,および POSIX シェルのエラー・リダイレクション

Bourne,Korn,または POSIX シェルの標準エラー・リダイレクションの一般的な形式は次のとおりです。

command 2> errorfile

command 変数はオペレーティング・システムのコマンドです。 errorfile 変数は,プロセスが標準エラーを書き込むファイルの名前です。 2> は,ファイル記述子数字と出力リダイレクション記号 (>) を組み合わせたものです。 ファイル記述子数字はアクセスする標準ファイルをシェルに指示して,その内容をリダイレクトできるようにするものです。 ファイル記述子数字 2 は,標準エラー・ファイルがリダイレクトされることを示します。

Bourne,Korn,および POSIX シェルの場合,ファイル記述子数字は次のように,コマンドが通常使用する各ファイルと対応しています。

次の例では, ls コマンドが存在しないファイル reportx を表示しようとすると,エラーは error ファイルにリダイレクトされます。 その後,ファイル error の内容を表示します。

$ ls reportx 2> error
$ cat error
reportx not found
$
 

上記の例では標準エラーだけがファイルにリダイレクトされますが,標準エラーと標準出力の両方をリダイレクトするのが普通です。 詳細は6.2.3 項を参照してください。

多くのコマンドの場合,標準出力と標準エラーとの違いを理解するのはむずかしいものです。 たとえば,ls コマンドを使用して存在しないファイルを表示させようとすると,エラー・メッセージが画面に表示されます。 上記の例のようにエラー・メッセージをファイルにリダイレクトしても,出力は同じです。

6.2.2.2    C シェルのエラー・リダイレクション

C シェルにおける標準エラー・リダイレクションの一般的な形式は次のとおりです。

( (command> outfile) )>& errorfile

command 変数はオペレーティング・システムのコマンドです。 outfile 変数は,プロセスが標準出力を書き込むファイルの名前です。 > は標準エラーをファイルにリダイレクトします。 errorfile 変数は,プロセスが標準エラーを書き込むファイルの名前です。 なお,このコマンド形式のカッコは必ず必要です。

6.2.3    標準エラーと標準出力の両方のリダイレクト

これまでは,標準出力と標準エラーを別々にリダイレクトする方法について説明しました。 しかし,通常は標準出力と標準エラーを同時にリダイレクトします。 標準出力と標準エラーは,異なるファイルに書き込むことも,同じファイルに書き込むこともできます。

Bourne,Korn,および POSIX シェルの場合,標準出力と標準エラーの両方を異なるファイルにリダイレクトするための一般形式は次のとおりです。

command >outfile 2> errorfile

command 変数はオペレーティング・システムのコマンドです。 outfile 変数はプロセスが標準出力を書き込むファイルの名前です。 2> 記号はエラー出力をリダイレクトします。 errorfile 変数はプロセスが標準エラーを書き込むファイルの名前です。 C シェルの場合,標準出力と標準エラーの両方を異なるファイルにリダイレクトするための一般形式は次のとおりです。

( command> outfile )>& errorfile

command 変数はオペレーティング・システムのコマンドです。 outfile 変数はプロセスが標準出力を書き込むファイルの名前です。 >& 記号はエラー出力をリダイレクトします。 errorfile 変数は,プロセスが標準エラーを書き込むファイルの名前です。 なお,このコマンド形式のカッコは必ず必要です。 詳細は6.2.2.2 項を参照してください。

Bourne,Korn,および POSIX シェルの場合,標準出力と標準エラーの両方を同じファイルにリダイレクトするための一般形式は次のとおりです。

command1 > outfile 2>&1 errorfile

command 変数はオペレーティング・システムのコマンドです。 1> 記号は標準出力をリダイレクトします。 outfile 変数は,プロセスが標準出力を書き込むファイルの名前です。 2>&1 記号は,標準エラー (ファイル記述子 2) を標準出力 (>&1) に対応するファイル,outfile に書き込むようにシェルに指示するものです。

C シェルの場合,標準出力と標準エラーの両方を同じファイルにリダイレクトするための一般形式は次のとおりです。

command >& outfile

command 変数はオペレーティング・システムのコマンドです。 outfile 変数は,プロセスが標準出力を書き込むファイルの名前です。 >& 記号は,標準出力と標準エラーを outfile で指定される同じファイルに書き込むようにシェルに指示するものです。

6.3    複数プロセスの同時実行

オペレーティング・システムは複数の異なるプロセスを同時に実行することができます。 この能力により,Tru64 UNIX オペレーティング・システムはマルチタスキング・オペレーティング・システムとなっています。 これは,複数のユーザのプロセスを同時に実行できるという意味です。

これらの異なるプロセスは,1 人のユーザのものであっても複数のユーザのものであってもかまいせん。 シェルのプロンプトに対し一度にコマンドを入力する必要はありません。 フォアグラウンド・プロセスとバックグラウンド・プロセスの両方を同時に実行することもできます。 以降の各項で,フォアグラウンド・プロセスとバックグラウンド・プロセスについて説明します。

6.3.1    フォアグラウンド・プロセスの実行

通常,コマンド行にコマンドを入力すると,結果が画面に表示されるのを待ちます。 シェルのプロンプトに対して 1 つずつ入力されたコマンドは,フォアグラウンド・プロセスと呼ばれます。

ほとんどのコマンドは 1,2 秒という短い時間で実行されます。 しかし,コマンドのなかにはもっと長い実行時間を要するものもあります。 実行時間の長いコマンドをフォアグラウンド・プロセスとして実行すると,そのコマンドの実行が終了するまで,他のコマンドは実行できません。 このような場合,実行時間の長いコマンドはバックグラウンド・プロセスとして実行します。 次の項では,バックグラウンド・プロセスについて説明します。

6.3.2    バックグラウンド・プロセスの実行

バックグラウンド・プロセスは,実行に長い時間がかかるコマンドでは,きわめて有効です。 実行時間の長いコマンドをフォアグラウンド・プロセスとして入力すると画面を塞いでしまうため,このようなコマンドはバックグラウンド・プロセスとして実行します。 こうすれば,フォアグラウンドで引き続き他の作業を実行することができます。

バックグラウンド・プロセスを実行するときは,コマンドの終わりにアンパサンド (&) を付けます。 プロセスをバックグラウンドで起動した後,ワークステーションから他のコマンドを入力することによって,別の作業を実行できます。

バックグラウンド・プロセスを作成すると,次のようになります。

バックグラウンド・プロセスを作成したら,その PID 番号を書き留めておいてください。 PID 番号は,プロセスをモニタしたり終了したりするときに役にたちます。 詳しくは6.4 節を参照してください。

バックグラウンド・プロセスは,システムが行っている作業総量を増加させるため,システムの処理速度が遅くなる場合があります。 問題になるかどうかは,システムの処理速度がどの程度遅くなるかによります。 また,システムのユーザが行っている他の作業の性質や,実行中のバックグラウンド・プロセスの数にもよります。

ほとんどのプロセスは,バックグラウンドで実行するときでも,出力を標準出力します。 リダイレクトされない限り,標準出力はワークステーションに表示されます。 バックグラウンド・プロセスからの出力がシステムの他の作業に干渉することもあるため,通常はバックグラウンド・プロセスからの出力をファイルやプリンタにリダイレクトするほうが良いでしょう。 こうすれば,都合の良いときにいつでも出力を見ることができます。 出力のリダイレクションについての詳細は,この章の後で説明する例,および6.2 節を参照してください。

この章の後に示す例は,実行に数秒以上かかるコマンドを使用しています。

$ find / -type f -print
 

このコマンドはシステムにあるすべてのファイルのパス名を表示します。 ここでは,find コマンドについて詳しく知っておく必要はありません。 プロセスでどのように作業するかを具体的に示すために使用しているだけです。 find コマンドについて詳しく知りたい場合は, find(1) リファレンス・ページを参照してください。

次の例では,find コマンドをバックグラウンドで実行し ([&] を入力), その出力を dir.paths という名前のファイルにリダイレクトします ([>] 演算子の使用)。

$ find / -type f -print  > dir.paths &
24
$

バックグラウンド・プロセスが起動すると,システムはそれに PID (プロセス識別) 番号 (この例では 24) を割り当て,それを表示してから,次のコマンドの入力を促すプロンプトを表示します。 実際に表示されるプロセス番号は上の例と下の例で表示されている番号とは異なります。

Korn または POSIX シェルまたは C シェルを使用している場合には,ジョブ番号も割り当てられます。 C シェルでは,上の例は次のようになります。

% find / -type f -print  > dir.paths &
[1] 24
%

ジョブ番号 [1] は PID 番号の左側に表示されます。

ps (process status) または jobs コマンド (C シェル,Korn および POSIX シェル) を使用して,プロセスの状態をチェックすることができます。 また,kill コマンドでプロセスを終了することもできます。 これらのコマンドについては,6.4 節を参照してください。

C シェルでは,バックグラウンド・プロセスが完了すると,次のようなメッセージが表示されます。

[1] 24  Done   find / -type f -print  > dir.paths
 

完了メッセージはジョブ番号と PID,状態 Done,および実行したコマンドを表示します。

6.4    プロセスのモニタと終了

どのプロセスが実行中であるかを調べて,そのプロセスに関する情報を表示するには,ps (process status) コマンドを使用します。 Korn および POSIX シェルと C シェルでは,jobs コマンドを使用してバックグラウンド・プロセスをモニタすることもできまます。

プロセスを終了する前に停止する必要がある場合は,kill コマンドを使用してください。

以降の項では,プロセスをモニタおよび終了する方法について説明します。

6.4.1    プロセス状態のチェック

ps コマンドを使用すると,フォアグラウンドとバックグラウンド両方のすべてのアクティブ・プロセスの状態がモニタできます。 Korn および POSIX シェルと C シェルでは,jobs コマンドを使用して,バックグラウンド・プロセスだけをモニタすることもできまます。 以降の項で,ps コマンドと jobs コマンドについて説明します。

6.4.1.1    ps コマンド

ps コマンドの形式は次のとおりです。

ps

例 6-1 では,ps コマンドは,ユーザのワークステーションに関連するすべてのプロセスの状態を表示しています。

例 6-1:  ps コマンドからの出力

$ ps
PID          TTY   STAT       TIME    CMD
29670        p4    I       0:00.00    -sh (csh)
  515        p5    S       0:00.00    -sh (csh)
28476        p5    R       0:00.00    ps
  790        p6    I       0:00.00    -sh (csh)
$
 

PID

プロセス識別子。 システムは,各プロセスの起動時にプロセス識別番号 (PID 番号) を割り当てる。 プロセスと特定の PID 番号との間には一切関係がない。 つまり,同じプロセスを何度かスタートすれば,そのつど異なる PID 番号を持つことになる。

TTY

制御端末デバイス名。 複数のワークステーションがあるシステムでは,このフィールドにプロセスを起動したワークステーションを表示する。 ワークステーションが 1 つしかないシステムでは,このフィールドには console という指定か,1 つまたは複数の仮想端末の指定が表示される。

STAT

シンボリック・プロセス状態。 システムは,4 文字までの英数字で,プロセスの状態を表示する。 詳細は ps(1) リファレンス・ページを参照。

TIME

コンピュータがこのプロセスに充てた時間が,ps を入力した時からの分,秒,100分の 1 秒単位で表示される。

CMD

プロセスをスタートしたコマンド (あるいはプログラム) の名前。

-p フラグと PID 番号を指定して ps コマンドを使用すると,特定プロセスの状態をチェックすることもできます。 特定プロセスの状態をチェックするための一般形式は次のとおりです。

ps -p PIDnumber

ps コマンドはバックグラウンド・プロセスの状態も表示します。 実行中のバックグラウンド・プロセスがある場合には,フォアグラウンド・プロセスとともに表示されます。 次の例では,find バックグラウンド・プロセスをスタートした後,その状態をチェックする方法を示します。

$ find / -type f -print > dir.paths &
25
$ ps -p25
PID   TTY         TIME  CMD
 25   console  0:40.00  find
$
 

バックグラウンド・プロセス状態は,そのプロセスが実行されている間は何度でもチェックできます。 次の例では,ps コマンドで前述の find プロセスの状態を 5 回表示します。

$ ps -p25
PID   TTY         TIME  COMMAND
 25   console  0:18:00  find
$ ps -p25
PID   TTY         TIME  COMMAND
 25   console  0:29:00  find
$ ps -p25
PID   TTY         TIME  COMMAND
 25   console  0:49:00  find
$ ps -p25
PID   TTY         TIME  COMMAND
 25   console  0:58:00  find
$ ps -p25
PID   TTY         TIME  COMMAND
 25   console  1:02:00  find
$ ps -p25
PID   TTY       TIME COMMAND
$
 

なお,6 回目の ps コマンドは状態情報を返しませんが,これは,最後の ps コマンドが入力される前に find プロセスが終了したためです。

通常は,ここで説明している単純な ps コマンドでも,プロセスについて必要な情報はすべてわかります。 ただし,フラグを使用すれば,ps コマンドが表示する情報の種類を制御することができます。 最も便利な ps フラグの 1 つは -e です。 -e を指定すると ps は,ユーザの端末またはワークステーションに関連するプロセスだけでなく,すべてのプロセスに関する情報を返します。 ps コマンドの全フラグについての説明は, ps(1) リファレンス・ページを参照してください。

6.4.1.2    jobs コマンド

Korn および POSIX シェルと C シェルは,バックグラウンド・プロセスが作成されると,ジョブと PID の両方を表示します。 jobs コマンドは,ジョブ番号に基づいて,すべてのバックグラウンド・プロセスの状態だけを報告します。

jobs コマンドの形式は次のとおりです。

jobs

-l フラグを追加すると,ジョブ番号と PID の両方を表示します。

次の例では,C シェルにおいて find プロセスを起動し,その後,jobs -l コマンドを使用して状態をチェックする方法を示します。

% find / -type f -print > dir.paths &
[2] 26
% jobs -l
[2] +26 Running   find / -type f -print > dir.paths &
% 
 

状態メッセージはジョブ ([2]) と PID 番号 (26) の両方,状態 Running, および実行されたコマンドを表示します。

6.4.2    フォアグラウンド・プロセスの取り消し (Ctrl/C)

フォアグラウンド・プロセスを取り消す (実行中のコマンドを停止する) ときは,Ctrl/C を押します。 コマンドは実行を停止し,システムはシェル・プロンプトを表示します。 なお,フォアグラウンド・プロセスを取り消すことは,コマンド実行を停止することと同じです (第 1 章で説明)。

大部分の単純なオペレーティング・システム・コマンドは,プロセスの取り消し方を示す例としては適当ではありません。 コマンドの実行があまりに速く,取り消す間もなく終わってしまうからです。 ただし,次の find コマンドは実行に長い時間がかかるので,プロセスが 2,3 秒間実行してから,Ctrl/C を押すことによって取り消すことができます。

$ find / -type f -print
/usr/sbin/acct/acctcms
/usr/sbin/acct/acctcoN1
/usr/sbin/acct/acctcon2
/usr/sbin/acct/acctdisk
/usr/sbin/acct/acctmerg
/usr/sbin/acct/accton
/usr/sbin/acct/acctprc1
/usr/sbin/acct/acctprc2
/usr/sbin/acct/acctwtmp
/usr/sbin/acct/chargefee
/usr/sbin/acct/ckpacct
/usr/sbin/acct/dodisk
[Ctrl/C]
$
 

システムはシェル・プロンプトを画面に返します。 ここで,別のコマンドを入力することができます。

6.4.3    バックグラウンド・プロセスの取り消し (kill コマンド)

バックグラウンド・プロセスを起動してから,そのプロセスを中止したくなった場合は,kill コマンドでプロセスを取り消すことができます。 ただし,バックグラウンド・プロセスを取り消すには,そのプロセスの PID 番号が必要です。

プロセスの PID 番号を忘れてしまった場合は,ps コマンドを使用して,すべてのプロセスの PID 番号を表示させることができます。 C シェルまたは Korn または POSIX シェルを使用している場合には,jobs コマンドを使用して,バックグラウンド・プロセスのみを表示させるほうが効率的です。

特定のプロセスを終了させるための一般形式は次のとおりです。

kill PIDnumber

ログインしてからの全プロセスを終了したい場合は,kill 0 コマンドを使用します。 kill 0 を使用する場合には,PID 番号は必要ありません。 このコマンドはすべてのプロセスを削除するため,注意して使用してください。

次の例では,別の find プロセスを起動し,その状態をチェックしてから,終了する方法を示します。

$ find / -type f -print > dir.paths &
38
$ ps
PID   TT   STAT       TIME    COMMAND
520   p4   I       0:11:10  sh
38    p5   I       0:10:33  find
1216  p6   S       0:01:14  qdaemon
839   p7   R       0:03:55  ps
$ kill 38
$ ps
38 Terminated
PID   TT   STAT       TIME    COMMAND
520   p4   I       0:11:35  sh
1216  p6   S       0:01:11  qdaemon
839   p7   R       0:03:27  ps
$
 

コマンド kill 38 がバックグラウンドの find プロセスを停止したので,2 番目の ps コマンドは,PID 番号 38 に関する状態情報を返しません。 次のコマンドを入力するまで,システムは終了メッセージを表示しません。

なお,この例では,kill 38kill 0 は同じ効果を持っています。 なぜなら,この端末またはワークステーションからは 1 つのプロセスしか起動していないからです。

C シェルでは,kill コマンドの形式は次のとおりです。

kill % jobnumber

次の例では,C シェルで別の find プロセスを起動し,jobs コマンドでその状態をチェックしてから,終了する方法を示します。

% find / -type f -print > dir.paths &
[3] 40
% jobs -l
[3] +40 Running  find / -type f -print > dir.paths &
% kill %3
% jobs -l
[3]  +Terminated    find / -type f -print > dir.paths
% 
 

6.4.4    フォアグラウンド・プロセスの中断と再開 (C シェルのみ)

システム資源を消費するプロセスを長時間実行している途中で,他のタスクを急いで実行する必要が生じたときは,フォアグラウンド・プロセスを一旦中断してから再開するとよいでしょう。

プロセスが完了するのを待たなくても,そのプロセスを一時停止 (中断) し,もっと大切なタスクを実行してから,そのプロセスを再開することができます。 プロセスを中断する機能は,C シェルのユーザしか利用できません。

プロセスを中断するには Ctrl/Z を押します。 ジョブ番号,状態 Suspended,および実行したコマンドをリストしたメッセージが表示されます。

プロセスを再開する用意ができたら,フォアグラウンド・タスクとして,次のようにジョブ番号 n を入力してください。

% n
 

バックグラウンドでプロセスを再開するときは,次のようにジョブ番号 n を入力してください。

% n &
 

次の例では,find プロセスをスタートさせて中断し,その状態をチェックしてから再開し,その後,終了するものです。

% find / -type f -print > dir.paths &
[4] 41
% jobs -l
[4] +41 Running  find / -type f -print > dir.paths &
% [Ctrl/Z]
Suspended
% jobs -l
[4] +Stopped   find / -type f -print > dir.paths
% 4 &
[4] find / -type f -print > dir.paths &
% kill %4
[4] +Terminated   find / -type f -print > dir.paths
 

中断したプロセスは,fg コマンドで再開できます。 あるいは,現在実行中のプロセスがあまりに時間がかかり,キーボードを塞ぐ場合は,bg コマンドを使用してそのプロセスをバックグラウンドに入れて,他のコマンドを入力することもできます。

次の例では,find プロセスをスタートさせて中断し,そのプロセスをバックグラウンドに入れて,ファイルをコピーした後,そのプロセスをフォアグラウンドで再開するものです。

% find / -type f -print > dir.paths
[Ctrl/Z]
Suspended
% bg
[5]    find / -type f -print > dir.paths &
% cp salary1 salary2
% fg
find / -type f -print > dir.paths
%
 

6.5    ユーザとユーザのプロセスに関する情報の表示

Tru64 UNIX オペレーティング・システムには,現在システムを使用しているユーザと,そのユーザが何を実行しているか知らせる,次のようなコマンドがあります。

who

現在ログインしているユーザを表示する。

w

現在ログインしているユーザと,ユーザがワークステーションで現在何を実行しているかを表示する。

ps au

現在ログインしているユーザと,ユーザが実行しているプロセスに関する情報を表示する。

who コマンドを使用すると,システムにログインしているユーザを確認できます。 たとえば,メッセージを送りたいときや,現在,その人の手を借りられるかどうか知りたいときは,特に有効でしょう。

例 6-2 では,現在ログインしているユーザ全員が表示されます。

例 6-2:  who コマンドからの出力

$ who
juan    tty01   Jan 15   08:33
chang   tty05   Jan 15   08:45
larry   tty07   Jan 15   08:55
tony    tty09   Jan 15   07:53
lucy    pts/2   Jan 15   11:24   (boston)
$
 

who コマンドは,システムにログインしている各ユーザのユーザ名,使用しているワークステーション,およびその人がログインした時刻を表示します。 また,ユーザがリモート・システムからログインしている場合には,そのシステム名も表示されます。 たとえば,lucyJan 1511:24 に,システム boston からリモートでログインしています。

who コマンドの実際の表示形式は,現在のロケールにより異なります。 ロケールについての詳細は,付録 C を参照してください。

who -u コマンドは,who コマンドの全情報のほかに,各ユーザの PID 番号,ワークステーションでの作業を終了した時点からの時間と分数も表示します。 1 分未満の作業はドット (.) で示されます。

例 6-3 では,現在ログインしているユーザ全員が表示されます。

例 6-3:  who -u コマンドからの出力

$ who -u
juan   tty01   Jan 15   08:33   01:02   50
chang  tty05   Jan 15   08:45     .     52
larry  tty07   Jan 15   08:55     .     58
tony   tty09   Jan 15   07:53   01:20   60
lucy   pts/5   Jan 15   11:24     .     65  (boston)
$
 

例 6-3 では,juantony が 1 時間以上作業をしていないのに対し, changlarry,および lucy は作業をやめてから 1 分未満です。

これで,だれがシステムで作業しているかを調べる方法がわかりました。 次に,各ユーザが現在どんなコマンドを実行しているかを知りたい場合があるかもしれません。 w コマンドは,各ユーザのワークステーションで現在実行中のコマンドを表示します。

例 6-4 では,全ユーザ (User) と現在のコマンド (what) が表示されます。

例 6-4:  w コマンドからの出力

$ w
11:02 up 3 days, 2:40, 5 users, load average: 0.32, 0.20, 0.00
User     tty       login@  idle   JCPU   PCPU  what
juan     tty01     8:33am    12     54     14  -csh
chang    tty05     8:45am          6:20    26  mail
larry    tty07     8:55            1:58     8  -csh
tony     tty09     7:53    3:10      22     4  mail
lucy     tty02     11:24   1:40      18     4  -csh
$
 

場合によっては,現在のプロセス (フォアグラウンドとバックグラウンドの両方) と,それを実行しているユーザの詳細なリストが必要になることもあります。 このようなリストを表示させるには,ps au コマンドを使用します。 例 6-5 では,5 人のユーザとそのアクティブ・プロセスが表示されます。

例 6-5:  ps au コマンドからの出力

$ ps au
USER     PID %CPU %MEM VSZ  RSS TTY  S STARTED     TIME COMMAND
juan   26300 16.5  0.8 441  327 p3   R          0:02:01  ps au
chang  25821  7.0  0.2 149   64 p4   R          0:12:23  mail -n
larry  25121  6.1  0.2 107   83 p22  R         26:25:07  lpstat
tony   11240  4.5  0.6 741  225 p1   R          1:57:46  vi
lucy   26287  0.5  0.1  61   28 p1   S          0:00:00  more
$
 

一般ユーザにとって最も大切なフィールドは USERPIDTIME,および COMMAND フィールドです。 その他のフィールドに関する情報は, ps(1) リファレンス・ページを参照してください。