Gentooの創設者によるLinuxの基本。 パート2(3/5):プロセス管理

この文章では、プロセス制御チームについて説明します。 プロセスを凍結する方法、解凍する方法、バックグラウンドに送信する方法、優先順位を変更する方法、実行中のプロセスを表示する方法、そしてそれらを残酷に殺す方法を学びます。 信号の概念が導入されました。 bg、fg、jobs、kill、nohup、nice、renice、ps、topなどのコマンドが含まれています。







Gentooの創設者によるLinuxの基本ナビゲーション:


パートI
  1. BASH:ナビゲーションの基本 (はじめに)
  2. ファイルとディレクトリを管理する
  3. リンクおよびファイルとディレクトリの削除
  4. グローブルックアップ (合計とリンク)


パートII
  1. 正規表現 (イントロ)
  2. フォルダーの割り当て、ファイル検索
  3. プロセス管理
  4. テキスト処理とリダイレクト
  5. カーネルモジュール (合計とリンク)






プロセス管理



Xeyesを起動する



プロセス制御を学習するには、最初にプロセスを開始する必要があります。 Xが実行されていることを確認してください(グラフィックサーバー-およそ)。そして、次のコマンドを実行します。









$ xeyes -center red







マウスカーソルに続いて、xeyesポップアップと赤目が表示されます。 また、ターミナルでコマンドを入力する招待を受け取っていないことに注意してください。









プロセス停止



プロンプトに戻るには、Control-C(多くの場合、Ctrl-Cまたは^ Cと書かれています)を押す必要があります。









招待を取り戻しましたが、xeyesウィンドウが消えました。 実際、プロセスは「強制終了」されました。 Control-Cを完了する代わりに、Control-Zを使用してプロセスを単純に停止できます。









$ xeyes -center red

Control-Z






  [1] +停止したxeyes -center red 
$







今度はbashプロンプトが表示され、xeyesウィンドウが一番上に表示されたままになります。 彼と少し遊ぶと、一箇所で目が凍っているのに気付くかもしれません。 xeyesウィンドウが別のウィンドウによってブロックされてから再び開かれた場合、再描画されていないことがわかります。 プロセスは何もしません。 彼は実際に停止しています。









fgおよびbg



プロセスを「起動」して再開するには、fgコマンドを使用して最前面に移動します(英語のフォアグラウンドから-約Per。)。









$ fg

(test it out, then stop the process again)

Control-Z






  [1] +停止したxeyes -center red 
$







そして、bgコマンドを使用してバックグラウンドで続行します(英語のbackgroudから-約Per。):









$ bg

[1]+ xeyes -center red &

$








いいね! これで、xeyesプロセスがバックグラウンドで実行され、再びbashプロンプトが表示されます。









&を使用



(Control-Zとbgを使用する代わりに)バックグラウンドでxeyesをすぐに実行する必要がある場合、xeyesコマンドの最後に "&"(アンパサンド)を追加するだけです。









$ xeyes -center blue &

[2] 16224








複数のバックグラウンドプロセス



現在、バックグラウンドでは、赤と青のxeyesが同時に機能しています。 ジョブを含むジョブのリストを表示できます。









 $ jobs -l 
      

[1]- 16217 Running xeyes -center red & [2]+ 16224 Running xeyes -center blue &






左の列の番号は、bashが起動時に割り当てたジョブシーケンス番号です。 2番目のタスクのプラス(+)は、これが「現在のタスク」であることを意味し、 fgを入力すると最前面に表示されます。 番号を指定することで、特定のタスクを最前面に表示することもできます。 たとえば、fg 1は赤いxeyesを作成します。 次の列はプロセス識別子または省略されたpidで、-lオプションのおかげで出力に親切に追加されます。 最後に、「実行中」プロセス(実行中)とその右側のコマンドラインの両方のステータス。









信号の概要



Linuxは、プロセスを強制終了、停止、または続行するために、シグナルと呼ばれる特別な形式の対話を使用します。 プロセスにシグナルを送信することで、シグナルを終了、停止、または他のことを行うことができます。 これは、Control-C、Control-Zを押したとき、またはbgとfgを使用したときに実際に発生することです。bashに特定のシグナルをプロセスに送信するように指示します。 プロセスID(pid)パラメーターを示すことにより、killコマンドを使用してシグナルを送信することもできます。









 $  kill -s SIGSTOP 16224 
      

$ jobs -l

[1]- 16217 Running xeyes -center red & [2]+ 16224 Stopped (signal) xeyes -center blue






ご覧のとおり、killはプロセスを「強制終了」するわけではありませんが、強制終了する場合もあります。 -sオプションを使用すると、killはプロセスに任意のシグナルを送信できます。 Linuxは、それぞれSIGINT、SIGSTOP、またはSIGCONTシグナルを受信すると、プロセスを強制終了、停止、または続行します。 プロセスに送信できる他のシグナルがあります。 一部の信号は、プログラム自体の内部で処理できます。 特定のプログラムが処理するシグナルについては、たてがみのSIGNALSセクションで確認できます。









SIGTERMおよびSIGINT



プロセスを強制終了する場合、いくつかのオプションがあります。 デフォルトでは、killはSIGTERMを送信します。これはControl-Cによって送信されるSIGINTとは異なりますが、通常は同じ効果があります。









 $ kill 16217 
      

$ jobs -l

[1]- 16217 Terminated xeyes -center red [2]+ 16224 Stopped (signal) xeyes -center blue






完全なキル



プロセスは、SIGTERMとSIGINTの両方のシグナルを、その裁量で、停止されているか、何らかの形で「スタック」しているため、無視できます。 この場合、大きなハンマー(SIGKILLシグナル)を使用する必要がある場合があります。 プロセスはSIGKILLを無視できません。









$ kill 16224

$ jobs -l






  [2] + 16224 Stopped(signal)xeyes -center blue 
 $  kill -s SIGKILL 16224 
      

$ jobs -l

[2]+ 16224 Interrupt xeyes -center blue






いや



タスクを実行する端末は、タスク管理端末と呼ばれます。 一部のシェル(デフォルトではbashではありません)は、終了時にSIGHUPシグナルをバックグラウンドジョブに送信し、終了させます。 この動作からプロセスを保護するには、プロセスを開始するときにnohupを使用します。









$ nohup make &

[1] 15632

$ exit








psを使用してプロセスをリストする



前に使用したjobsコマンドは、bashセッションで実行されていたプロセスのみを表示します。 システム上のすべてのプロセスを表示するには、psをaおよびxオプションとともに使用します。









 $  ps ax 
      

PID TTY STAT TIME COMMAND 1 ? S 0:04 init [3] 2 ? SW 0:11 [keventd] 3 ? SWN 0:13 [ksoftirqd_CPU0] 4 ? SW 2:33 [kswapd] 5 ? SW 0:00 [bdflush]






プロセスのリストは通常​​非常に長いため、ここには最初の5つのプロセスのみがリストされています。 このコマンドは、マシンで現在実行されているすべての「キャスト」を提供しますが、その中には多くの追加情報があります。 axを指定しなかった場合、自分に属し、制御端末にあるプロセスのみのリストを受け取ります。 ps xコマンドは、制御端末にないプロセスも含めて、すべてのプロセスを表示します。 ps aを使用すると、すべてのユーザーの端末からプロセスのリストが取得されます。









「森」と「木」を表示する



各プロセスに関する他の情報を表示することもできます。 --forestオプションを使用すると、プロセスの階層を簡単に表示でき、システム内のさまざまなプロセスがどのように相互接続されているかがわかります。 あるプロセスが別のプロセスを開始した場合、起動されたプロセスはその子孫と呼ばれます。 --forestの出力では、親は左側にあり、子孫は右側に枝として表示されます。









 $  ps x --forest 
      

PID TTY STAT TIME COMMAND 927 pts/1 S 0:00 bash 6690 pts/1 S 0:00 \_ bash 26909 pts/1 R 0:00 \_ ps x --forest 19930 pts/4 S 0:01 bash 25740 pts/4 S 0:04 \_ vi processes.txt






「U」および「l」psオプション



オプションuおよびlは、プロセスに関するより詳細な情報を取得するために、オプションaおよびxと組み合わせて使用​​できます。









$ ps au





 ユーザーPID%CPU%MEM VSZ RSS TTY STAT START TIMEコマンド
 agriffis 403 0.0 0.0 2484 72 tty1 S 2001 0:00 -bash
 chouser 404 0.0 0.0 2508 92 tty2 S 2001 0:00 -bash
ルート408 0.0 0.0 1308248 tty6 S 2001 0:00 / sbin / agetty 3
 agriffis 434 0.0 0.0 1008 4 tty1 S 2001 0:00 / bin / sh / usr / X
チョーザー927 0.0 0.0 2540 96 pts / 1 S 2001 0:00 bash 
$ ps al





  F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIMEコマンド
 1001001403 1 9 0 2484 72 wait4 S tty1 0:00 -bash
 100 1000 404 1 9 0 2508 92 wait4 S tty2 0:00 -bash
 000 0 408 1 9 0 1308 248 read_c S tty6 0:00 / sbin / ag
 000 1001 434403 9 0 1008 4 wait4 S tty1 0:00 / bin / sh
 000 1000 927652 9 0 2540 96 wait4 S pts / 1 0:00 bash 


topを使用する



psを連続して数回実行している場合、発生している変更を確認しようとすると、おそらくtopを使用する必要があります。 一番上のプログラムには、プロセスの絶えず更新されているリストとその他の有用な情報が表示されます。









 $  top 
      

10:02pm up 19 days, 6:24, 8 users, load average: 0.04, 0.05, 0.00 75 processes: 74 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 1.3% user, 2.5% system, 0.0% nice, 96.0% idle Mem: 256020K av, 226580K used, 29440K free, 0K shrd, 3804K buff Swap: 136544K av, 80256K used, 56288K free 101760K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 628 root 16 0 213M 31M 2304 S 0 1.9 12.5 91:43 X 26934 chouser 17 0 1272 1272 1076 R 0 1.1 0.4 0:00 top 652 chouser 11 0 12016 8840 1604 S 0 0.5 3.4 3:52 gnome-termin 641 chouser 9 0 2936 2808 1416 S 0 0.1 1.0 2:13 sawfish






いいね



各プロセスには独自の優先度値があり、Linuxはこれを使用してCPU時間を共有します。 niceコマンドを使用して、プロセスの開始時にプロセスの優先順位を指定できます。









$ nice -n 10 oggenc /tmp/song.wav







優先度がナイスとして知られるようになったため、覚えやすくなりました。たとえば、ナイスの値を大きくすると、他のプロセスが「ナイス」(ナイス)になり、CPU時間により多くの優先度のアクセスが可能になります。 デフォルトでは、プロセスは優先度0で開始するため、oggencの優先度を10に設定すると、他のプロセスで作業する時間が長くなります。 通常、これは、oggencがプロセッサの長さに関係なく、oggencが他のプロセスを通常の速度で実行できることを意味します。 これらの「礼儀正しいレベル」はpsおよびtopのNI列で見ることができます。









レニス



niceコマンドは、プロセスの起動時にのみプロセスの優先順位を変更できます。 実行中のプロセスの優先度を変更する必要がある場合は、reniceコマンドを使用します。









 $  ps l 641 
      

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 0 5876 2808 do_sel S ? 2:14 sawfish

$ renice 10 641

641: old priority 0, new priority 10



$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 10 5876 2808 do_sel S ? 2:14 sawfish




$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 0 5876 2808 do_sel S ? 2:14 sawfish

$ renice 10 641

641: old priority 0, new priority 10



$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 10 5876 2808 do_sel S ? 2:14 sawfish




 $  ps l 641 
      

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 0 5876 2808 do_sel S ? 2:14 sawfish

$ renice 10 641

641: old priority 0, new priority 10



$ ps l 641

F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 000 1000 641 1 9 10 5876 2808 do_sel S ? 2:14 sawfish








翻訳をしてくれたDmitry Minsky (Dmitry.Minsky@gmail.com)に感謝します。









継続するには...






著者について



ダニエル・ロビンス



Daniel Robbinsは、Gentooコミュニティの創設者であり、Gentoo Linuxオペレーティングシステムの作成者です。 ダニエルは妻のメアリーと元気な娘2人とニューメキシコに住んでいます。 彼はFuntooの創設者兼代表でもあり、 IBM developerWorks 、Intel Developer Services、およびC / C ++ Users Journalの技術記事を数多く執筆しています。









クリス・ハウザー



クリス・ハウザーは、1994年にテイラー大学(米国インディアナ州)の管理者チームに参加し、コンピューターサイエンスと数学の学士号を取得して以来、UNIXの支持者でした。 その後、Webアプリケーション、ビデオ編集、UNIXドライバー、暗号化保護など、さまざまな分野で働きました。 現在、Sentry Data Systemsで働いています。 Chrisは、Gentoo LinuxやClojureなどの多くの無料プロジェクトにも貢献し、 The Joy of Clojureの共同執筆者でもあります。









アロン・グリフィス



Iron Griffisはボストンに住んでおり、過去10年間、Hewlett-PackardでTru64、Linux、Xen、KVMの仮想化セキュリティ認証用のUNIXネットワークドライバー、最近ではHP ePrintプラットフォームなどのプロジェクトに従事しました。 プログラミングの暇な時間に、Ayronは、自転車に乗ったり、ビットをジャグリングしたり、ボストンのプロ野球チームRed Socksを応援したりする際に、プログラミングの問題を消し去ることを好みます。








All Articles