この章では,オペレーティング・システムのプロセスについて説明します。 この章では次のような項目について説明します。
プログラムおよびプロセスの理解 (6.1 節)
プロセス入力,出力,およびエラーのリダイレクト (6.2 節)
フォアグラウンドとバックグラウンドでのプロセスの実行 (6.3 節)
プロセスの状態のチェック (6.4.1 項)
プロセスの取り消し (6.4.2 項)
ユーザとユーザのプロセスに関する情報の表示 (6.5 節)
この章で説明する例に従って実際に操作することにより,上記のトピックについて理解することができます。
画面に表示される情報が本書の説明と一致するように,必ずすべての例を実行してください。
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 シェルの場合,ファイル記述子数字は次のように,コマンドが通常使用する各ファイルと対応しています。
ファイル記述子 0 (< と同じ) は標準入力 (キーボード) を指定する。
ファイル記述子 1 (> と同じ) は標準出力 (画面) を指定する。
ファイル記述子 2 は標準エラー (画面) を指定する。
次の例では,
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 を作成して割り当てます。 Korn および POSIX シェルまたは C シェルでは,ジョブ番号も割り当てられます。
プロンプトが表示され,別のコマンドを入力できる。
C シェルでは,バックグラウンド・プロセスが完了するとメッセージが表示される。
バックグラウンド・プロセスを作成したら,その 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 38
と
kill 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 %
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
コマンドは,システムにログインしている各ユーザのユーザ名,使用しているワークステーション,およびその人がログインした時刻を表示します。
また,ユーザがリモート・システムからログインしている場合には,そのシステム名も表示されます。
たとえば,lucy
は
Jan 15
の
11: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
では,juan
と
tony
が 1 時間以上作業をしていないのに対し,
chang
,larry
,および
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 $
tty
: ユーザのワークステーション
login@
: ユーザのログイン時刻
idle
: ユーザがコマンドを入力してからの時間
JCPU
: 現在のログイン・セッション中に使用された全 CPU 時間
PCPU
: 現在実行中のコマンドによって使用された CPU 時間
what
: ユーザが現在実行しているコマンド
場合によっては,現在のプロセス (フォアグラウンドとバックグラウンドの両方) と,それを実行しているユーザの詳細なリストが必要になることもあります。
このようなリストを表示させるには,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 $
一般ユーザにとって最も大切なフィールドは
USER
,PID
,TIME
,および
COMMAND
フィールドです。
その他のフィールドに関する情報は,
ps
(1)