Linux å­Šç¿’ 第6ç«  実行䞭のプロセスを管理する

📢 この蚘事は gemini-2.5-flash によっお翻蚳されたした

第6ç«  実行䞭のプロセスを管理する

Linuxっお、マルチナヌザヌOSで、マルチタスクシステムでもあるんだ。マルチタスクっおこずは、耇数のプログラムを同時に動かせるっおこず。この動いおるプログラムのむンスタンスのこずを、通垞「プロセス」っお呌ぶんだよ。

シェルからプロセスを起動したり、䞀時停止させたり、停止させたり、匷制終了させたりできるんだ。それに、プロセスをバックグラりンドに眮いたり、フォアグラりンドに戻したりもできるよ。

6.1 プロセスを理解しよう

プロセスっおいうのは、コマンドが実行されたむンスタンスのこず。システム䞭のプロセスは、プロセスID (PID) っおいうので識別されおお、このPIDは珟圚のシステム䞊でナニヌクなんだ。PID以倖にも、プロセスは特定のナヌザヌアカりントやグルヌプアカりントず玐づいおお、そのプロセスがどんなシステムリ゜ヌスにアクセスできるかを刀断するのに圹立぀んだ。

プロセス関連の情報を衚瀺するコマンドは、䞻に/procファむルシステムに保存されおる生デヌタから情報を取埗しおるよ。各プロセスは/proc内のサブディレクトリそのプロセスのPIDが名前になっおるに自分の情報を保存しおるんだ。

6.2 プロセスの䞀芧衚瀺

psコマンドかtopコマンドを䜿うんだ。topコマンドの方が、より画面に特化した圢でプロセスを䞀芧衚瀺しおくれるよ。

6.2.1 psコマンドでプロセスを䞀芧衚瀺しよう

ps uを䜿うず、ナヌザヌ名ずか他の情報も衚瀺しおくれるよ。

VSZ仮想メモリサむズ (Virtual Set Size) で、むメヌゞプロセスのサむズ単䜍KBを衚瀺するんだ。

RSS(Resident Set Size) で、メモリ䞭のプログラムのサむズを衚瀺するよ。

VSZはプロセスに割り圓おられたメモリ量で、RSSはプロセスが実際に䜿っおるメモリ量スワップできない物理メモリのこずを衚しおるんだ。

STAT列Sは珟圚実行䞭のプロセス、Rはスリヌプ䞭のプロセス、+はプロセスがフォアグラりンド操䜜ず関連しおるこずを瀺すんだ。

珟圚のナヌザヌの党プロセスを芋るにはps ux | less

党ナヌザヌのプロセスを芋るにはps aux | less

出力列をカスタマむズしたり、特定の列で゜ヌトしたりもできるよ。䟋えばこんな感じ。

1
ps -eo pid,user,uid,group,gid,vsz,rss,comm --sort=-vsz | less

-eは実行䞭の党プロセスを衚瀺するオプションで、-oの埌ろには衚瀺する列を指定するんだ。commはコマンドで、--sort=-vszはvsz列で倧きい順に゜ヌトするっお意味だよ。

6.2.2 topコマンドでプロセスを䞀芧衚瀺・倉曎しよう

topコマンドを䜿うず、デフォルトではプロセスが珟圚䜿っおるCPUの割合で゜ヌトされお衚瀺されるんだ。

topコマンドでできる操䜜はこれ

コマンド説明
hヘルプ
Mメモリ䜿甚状況で゜ヌト
1å…šCPUの䜿甚状況衚瀺を切り替え (システムに耇数のCPUがある堎合)
R逆順゜ヌト
uその埌ナヌザヌ名を入力するず、そのナヌザヌのプロセスを衚瀺
rプロセスの優先床を倉曎 (nice倀)
kプロセスを匷制終了 (killコマンド)

6.2.3 System Monitorでプロセスを䞀芧衚瀺しよう

GNOMEデスクトップのGUIツヌルだよ。

6.3 バックグラりンドずフォアグラりンドのプロセスを管理しよう

GUIがないシステムだず、党郚シェルで操䜜するしかないよね。Bashシェルには耇数のプログラムを管理するGUIは぀いおないけど、アクティブなプログラムをバックグラりンドずフォアグラりンドで盎接移動させるこずができるんだ。こうすれば、たくさんのプログラムを動かし぀぀、今やりたいプログラムを遞んで䜜業できるっおわけ。

6.3.1 バックグラりンドプロセスを起動しよう

コマンドをバックグラりンドに眮くには

  1. コマンドの埌ろに&を぀ける

  2. atコマンドを䜿っお他のコマンドを実行する

  3. 実行䞭のプロセスに察しおは、Ctrl+Zで停止させお、それからfgでフォアグラりンドに戻すか、bgでバックグラりンドで実行を再開させる

バックグラりンドの出力がフォアグラりンドの操䜜を邪魔しないように、空のデバむス2>/dev/nullにリダむレクトするこずもできるよ。

jobsコマンドでバックグラりンドで動いおるコマンドを確認できるよ-lを䜿うずPIDも芋れる。コマンド番号の前に+が぀いおるのは最近バックグラりンドに眮かれたゞョブで、-が぀いおるのはその前に眮かれたゞョブなんだ。

6.3.2 フォアグラりンドずバックグラりンドのコマンドを䜿っおみよう

バックグラりンドゞョブを参照したいなら、%ずゞョブ番号jobsコマンドの出力を䜿うんだ。他にもこんな方法があるよ。

  • % — 最近バックグラりンドに眮かれたゞョブ぀たり番号の埌ろに+が぀いおるや぀を参照する

  • %string — stringで始たるゞョブあいたいだずダメ、぀たり䞀臎結果がナニヌクじゃないず

  • %?string — コマンドラむンのどこかにstringが含たれるゞョブこれもあいたいだずダメ、䞀臎結果がナニヌクじゃないず

  • %-- — 最近バックグラりンドに眮かれたゞョブの前に眮かれたゞョブ぀たり番号の埌ろに-が぀いおるや぀を参照する

fg %1を䜿うず、番号1のタスクをフォアグラりンドに持っおくるこずができるし、bg %5を䜿うず、停止䞭の番号5のコマンドをバックグラりンドで実行し続けさせるこずができるよ。

viコマンドなんかは、バックグラりンドに眮く前に自動的に停止しちゃうから、忘れちゃわないようにファむルを保存しおからバックグラりンドに眮くのを忘れずにね。

6.4 プロセスを匷制終了したり倉曎したりしよう

プロセスにいろんなシグナルを送っおその挙動を倉えるこずもできるし、プロセスのプロセッサ優先床を倉曎するこずもできるんだ。

6.4.1 killずkillallコマンドでプロセスを匷制終了させよう

この2぀のコマンドは、よく実行䞭のプロセスを終了させるのに䜿われるけど、実際にはプロセスに有効なシグナルを送っおるんだ。シグナルは数字か名前で衚されるよ。

シグナル数字説明
SIGHUP1蚭定ファむルを再読み蟌みする
SIGINT2キヌボヌドからの割り蟌み
SIGQUIT3キヌボヌドからの終了
SIGABRT6abort(3)呌び出しで生成される䞭断シグナル
SIGKILL9匷制終了シグナル
SIGTERM15終了シグナル
SIGCONT19, 18, 25停止䞭のプロセスを再開する
SIGSTOP17, 19, 23プロセスを停止する

最埌の2぀のシグナルに぀いおは、最初の倀はAlphaずSPARC向け、真ん䞭の倀はx86向け、最埌の倀はMIPSアヌキテクチャ向けだよ。

デフォルトはSIGTERM (15) シグナルなんだ。異なるプロセスはいろんなシグナルに応答できるけど、SIGKILL (9) ずSIGSTOPシグナルだけは、どんなプロセスもブロックできないんだよ。

  1. killコマンドを䜿っおPIDに基づいおプロセスにシグナルを送る
1
kill [シグナル] [PID]

䟋えば、プロセスIDが2333のプロセスを匷制終了するならkill -9 2333ずかkill -SIGKILL 2333っお感じ。

  1. killallコマンドを䜿っお名前に基づいおプロセスにシグナルを送る

killコマンドず䌌おるけど、同じ名前のコマンドをたくさん匷制終了したいずきにすごく䟿利なんだ。でも、うっかり倧事な同じ名前のプロセスを倉えちゃわないように泚意しおね。

䟋えば、gnome-shellを再起動するならkillall -1 gnome-shellっおやるよ。

6.4.2 niceずreniceコマンドでプロセッサの優先床を蚭定しよう

Linuxカヌネルがどの実行䞭プロセスがCPUにアクセスできるかを決めるずきに考慮する芁玠の䞀぀が、プロセスに぀いおるnice倀なんだ。範囲は-20から19たでで、デフォルトは0だよ。

nice倀が䜎いほど優先床が高くなるんだ。rootナヌザヌだけが負の倀を蚭定しお優先床を䞊げられる倀を䜎くするけど、䞀般ナヌザヌは優先床を䞋げるこずしかできない倀を高くするんだよ。

niceコマンドを䜿っお特定のnice倀でコマンドを実行できるし、reniceコマンドずPIDを䜿っおすでに実行䞭のプロセスのnice倀を倉曎するこずもできるんだ。䟋えばこんな感じ。

nice -n +5 updatedb &っおやるず、updatedbコマンドをバックグラりンドで優先床5で実行するよ。

renice -n 3 2333っおやるず、PIDが2333のプロセスのnice倀を3に倉曎するんだ。

6.5 cgroupsを䜿っおプロセスを制限しよう

あるプロセスに蚭定したnice倀は子プロセスには適甚されないんだ。぀たり、niceでは特定のナヌザヌやアプリケヌションが䜿えるLinuxシステムの総リ゜ヌス量を制限するこずはできないっおこず。

cgroupsコマンドを䜿うず、プロセスをタスクずしお特定しお、特定のコントロヌルグルヌプに所属させるこずができるんだ。タスクは階局構造で蚭定できお、その䞭にはデヌモンすべおのバックグラりンドサヌバヌプロセスにデフォルトの制限が蚭定されおるず呌ばれるタスクや、httpdやvsftpdなんかに察する特定の制限を蚭定するサブタスクが含たれるよ。

あるタスクがプロセスを起動するず、その子プロセスは芪プロセスの制限蚭定を継承するんだ。制限内容は、ストレヌゞ、プロセッサスケゞュヌリング、プロセスレポヌト、CPU割り圓お、デバむスアクセス、メモリ䜿甚状況なんかが含たれるよ。

cgroupsの蚭定はかなり厄介かもしれないな。蚭定ファむルを線集しおcgroupsを䜜成したり/etc/cgconfig.conf、特定のナヌザヌやグルヌプを制限したり/etc/cgrules.confするんだ。cgscreateコマンドを䜿っおcgroupsを䜜成し、それらのグルヌプを/sys/fs/cgroup階局に远加するこずもできるよ。もし蚭定を間違えるず、システムが起動できなくなる可胜性もあるから泚意しおね。

Visits Since 2025-02-28

Hugo で構築されおいたす。 | テヌマ Stack は Jimmy によっお蚭蚈されおいたす。