LoginSignup
4
4

More than 5 years have passed since last update.

Linux のプロセス, ジョブ操作

Posted at

プロセス, ジョブ操作

  • Linux では、プロセステーブルというところに、実行中のプログラム全てに実行時間、実行ユーザーなど記録されている。プロセスが終了するとプロセステーブルから消える

  • ps # PID: プロセスID, TTY: プロセスの起動端末, CDM: プログラム名

    • Linux が起動したプロセス(デーモン) は TTY ? と表示される
  • デーモンと Fork&Exec

    • 一つの動作を担当するプロセス自身が、次の動作に必要となるプロセスを自分のコピーから作って処理を渡していくことで一連の処理が完成する 例えば、 sshd であれば、 ssh接続を待ち受けるプロセス -> 認証を受け持つプロセス -> 認証後に ssh 接続をログアウトまで担うプロセス。 最初のプロセスはフォーク後、他のユーザーからのログイン要求の待ち受けに回されることでサービスの継続が維持される
    • 親プロセス、子プロセス
    • ps -f # PPID: 親プロセス。どこからフォークしたのか
    • プロセスと実行ユーザー
    • 上記の例だと、認証が終わるまでは root ユーザー、認証後はログインユーザーの権限でプロセスが実行される。 root ユーザーは通常のユーザの操作ではなく、このように linux のプロセス操作などに使われるのが基本用途なので、むやみに人が使わない
    • ps -u # 実行ユーザを表示
  • プリフォーク

    • sshd のように一つのプロセスが処理にかかりっきりだと、他のアクセスからの対応が遅れる。 そのため、事前に複数のプロセスをフォークしておき待機させておくことで速度を上げる。httpd などのプロセスはこれをしている
  • pstree # 全てのプロセス、親子関係をツリー状で表示

    • systemd プロセス - 全てのプロセスの親プロセス。 linux 起動時に起動されるプロセス
  • ps -C httpd # httpd サービスのプロセスを表示

  • ps -e # 全てのプロセスを表示。 ps だけだと自身のプロセスだけ

  • '-' でオプションを記述する POSIX スタイル, aux でする BSD スタイル

  • バックグラウンドジョブ

    • cp a.txt b.txt & # 最後に & をつけてコマンドする。 [] がこのバックグラウンドジョブの PID。 %1 のように % をつけて表記
    • watch -n1 "ls -l ~/work" # 一定時間ごとにコマンドを実行
    • fg [1] でコマンドプロンプトに処理を戻す。Ctrl + C で終了
    • Ctrl + Z で中断。 bg [1] でバックグラウンド処理再開
    • PID を指定しないと直前の ジョブを対象
    • jods # 実行中のジョブを確認
    • kill # ジョブ、プロセスの削除
    • 親プロセスを kill すると子プロセスも消える
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4