モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

目次目次を開く/閉じる

プロセス関連のコマンド

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2014/10/20
最終更新最終更新
2021/11/27
記事区分記事区分
一般公開

目次

    業務ではデータベース設計とSQL最適化を担当

    プロセスID関連 (ps, pgrep, pkill)

    全プロセスを表示するためには

    $ ps ax
    

    とすればよく、その表示を見やすくするためには "u" と "w" を追加して

    $ ps auxw
    

    とすればよいです。表示件数自体は同じです。そのうち特定のコマンドのプロセスIDだけを表示したい場合は

    $ ps ax | grep 'my_script' | grep -v grep | awk '{print $1}'
    

    とします。これを簡略化したコマンドが

    $ pgrep -f 'my_script'
    

    です。オプション " -l" を付与すれば詳細表示もできます。

    $ pgrep -f 'my_script' -l
    

    xargsと組み合わせると便利です。

    $ pgrep -f 'my_script' | xargs kill
    

    これを簡略化したコマンドが

    $ pkill -f 'my_script'
    

    です。

    プロセス名からプロセス ID を調べる (pidof)

    $ pidof nginx
    25898 3193
    
    $ ps auxw | grep nginx
    root      3193  0.0  0.0  71100     0 ?        Ss   Jul15   0:00 nginx: master process /usr/sbin/nginx
    nginx    25898  0.0  0.4  73108  4724 ?        S    Jul15  39:33 nginx: worker process
    ec2-user 31085  0.0  0.0   9040   892 pts/0    S+   00:30   0:00 grep --color=auto nginx
    

    プロセス名で kill、プロセスの死活監視 (killall)

    sudo killall slapd
    

    応用例として、シグナル0 を送ることでプロセスの死活監視が行えます。

    $ sudo killall -0 slapd
    $ echo $?
    0
    
    $ sudo killall -0 slapd2
    slapd2: no process found
    $ echo $?
    1
    

    プロセスの環境変数を調べる

    sudo strings /proc/{調べたいプロセスのpid}/environ
    

    カレントディレクトリの調査

    以下のようなコマンドで調査できます。

    $ sudo pwdx 1247
    1247: /var/lib/mysql
    
    $ sudo strings /proc/1247/environ | grep ^HOME
    HOME=/var/lib/mysql
    
    $ sudo readlink /proc/1247/cwd
    /var/lib/mysql
    
    $ sudo ls -l /proc/1247/cwd
    lrwxrwxrwx. 1 mysql mysql 0 Aug 23 19:34 /proc/1247/cwd -> /var/lib/mysql
    

    あるファイルリソースを開いているプロセスを表示 (lsof)

    別の観点からプロセス一覧を表示するコマンドが "lsof" です。"list open files" の略で、「ファイル」「ネットワークソケット」「デバイス」「パイプ」などの "file" リソースとそれを使用しているプロセスの情報を一覧表示します。

    mysqldのログファイルを開いているプロセス

    $ sudo lsof /var/log/mysqld.log
    COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
    mysqld    1087    mysql    1w      REG      253,0     6559     131408 /var/log/mysqld.log
    mysqld    1087    mysql    2w      REG      253,0     6559     131408 /var/log/mysqld.log
    

    TCPポートを開いているプロセス

    $ sudo lsof | grep TCP
    sshd       950     root    3u     IPv4      10445      0t0        TCP *:ssh (LISTEN)
    sshd       950     root    4u     IPv6      10453      0t0        TCP *:ssh (LISTEN)
    mysqld    1087    mysql   10u     IPv4      10910      0t0        TCP *:mysql (LISTEN)
    master    1180     root   12u     IPv4      11116      0t0        TCP localhost:smtp (LISTEN)
    master    1180     root   13u     IPv6      11118      0t0        TCP localhost:smtp (LISTEN)
    httpd     1190     root    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1196   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1197   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1198   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1199   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1200   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1201   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1202   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    httpd     1203   apache    4u     IPv6      11248      0t0        TCP *:http (LISTEN)
    sshd      1234     root    3r     IPv4      11618      0t0        TCP 192.168.56.10:ssh->192.168.56.1:56330 (ESTABLISHED)
    sshd      1238 username    3u     IPv4      11618      0t0        TCP 192.168.56.10:ssh->192.168.56.1:56330 (ESTABLISHED)
    

    スレッド数を表示

    プロセスには少なくとも一つのスレッドがあります。スレッドが複数あると、複数のCPUコアで並列処理が可能になります。あるプロセスのスレッドを表示するためには 'm' をオプションで追加します。

    Java プロセスのスレッド一覧を表示する例 (各スレッドの nice 値の確認)

    $ ps axml | grep java -A10
    F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
    0   497  2399     1   -   - 1286256 109444 -    -    ?        123:32 /usr/bin/java -Xms256m -Xmx256m -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Delasticsearch -Des.pidfile=/var/run/elasticsearch/elasticsearch.pid -Des.path.home=/usr/share/elasticsearch -cp :/usr/share/elasticsearch/lib/elasticsearch-1.7.2.jar:/usr/share/elasticsearch/lib/*:/usr/share/elasticsearch/lib/sigar/* -Des.default.path.home=/usr/share/elasticsearch -Des.default.path.logs=/var/log/elasticsearch -Des.default.path.data=/var/lib/elasticsearch -Des.default.path.work=/tmp/elasticsearch -Des.default.path.conf=/etc/elasticsearch org.elasticsearch.bootstrap.Elasticsearch
    0   497     -     -  20   0      -     - futex_ Sl   -          0:00 -
    1   497     -     -  20   0      -     - futex_ Sl   -          0:02 -
    1   497     -     -  20   0      -     - futex_ Sl   -          1:10 -
    1   497     -     -  20   0      -     - futex_ Sl   -          2:27 -
    1   497     -     -  20   0      -     - futex_ Sl   -          0:00 -
    1   497     -     -  20   0      -     - futex_ Sl   -          0:00 -
    1   497     -     -  20   0      -     - futex_ Sl   -          0:00 -
    1   497     -     -  20   0      -     - futex_ Sl   -          0:00 -
    1   497     -     -  20   0      -     - futex_ Sl   -          0:08 -
    1   497     -     -  20   0      -     - futex_ Sl   -          0:07 -
    --
    0   500 29056 28857   -   - 114624   928 -      -    pts/1      0:00 grep java -A10
    0   500     -     -  20   0      -     - pipe_w S+   -          0:00 -
    

    Windowsのタスクマネージャでも「プロセス」タブを選択した状態で「表示」→「列の選択」をクリックし

    「スレッド」にチェックを入れることで、各プロセスのスレッド数を表示できます。

    カーネルが管理するプロセスの情報を閲覧する (procfs ファイルシステム)

    procfs は "process filesystem" の意味で、/proc にマウントされる疑似ファイルシステムです。

    $ grep "proc" /etc/fstab
    proc  /proc  proc  defaults  0 0
    
    $ mount | grep ^proc
    proc on /proc type proc (rw)
    

    "/proc/[PID]" というディレクトリには "PID" のプロセスに関する情報が格納されています。有用なものに "/proc/[PID]/status" ファイルがあります。例えば "Vm*" という行を定期的に監視することで、そのプロセスのメモリ使用量の変動を把握できます。

    $ cat /proc/`pgrep -f '/usr/libexec/mysqld'`/status
    Name:   mysqld
    State:  S (sleeping)
    Tgid:   1092
    Pid:    1092
    PPid:   989
    TracerPid:      0
    Uid:    27      27      27      27
    Gid:    27      27      27      27
    Utrace: 0
    FDSize: 256
    Groups: 27
    VmPeak:   153144 kB
    VmSize:   135744 kB     ←仮想メモリの使用容量
    VmLck:         0 kB
    VmHWM:     15344 kB
    VmRSS:     15344 kB     ←物理メモリの使用容量
    VmData:   120736 kB
    VmStk:        88 kB
    VmExe:      6788 kB
    VmLib:      7212 kB
    VmPTE:       120 kB
    VmSwap:        0 kB
    Threads:        10
    SigQ:   0/3873
    SigPnd: 0000000000000000
    ShdPnd: 0000000000000000
    SigBlk: 0000000000087007
    SigIgn: 0000000000001000
    SigCgt: 00000001800066e9
    CapInh: 0000000000000000
    CapPrm: 0000000000000000
    CapEff: 0000000000000000
    CapBnd: ffffffffffffffff
    Cpus_allowed:   1
    Cpus_allowed_list:      0
    Mems_allowed:   1
    Mems_allowed_list:      0
    voluntary_ctxt_switches:        130
    nonvoluntary_ctxt_switches:     11
    

    参考

    メモリ使用容量の監視が目的であれば、以下のようにしても同じです。

    pidstat

    $ pidstat -r -p `pgrep -f '/usr/libexec/mysqld'`
    Linux 2.6.32-431.23.3.el6.i686 (localhost.localdomain)  2014年11月03日  _i686_  (1 CPU)
    00時08分21秒       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    00時08分21秒      1092      0.12      0.00  135744  15344   3.00  mysqld
    

    top

    $ top -p `pgrep -f '/usr/libexec/mysqld'`
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     1092 mysql     20   0  132m  14m 4532 S  0.0  3.0   0:10.37 mysqld
    

    プロセスツリーの表示および PGID の確認

    パイプで複数のコマンドをつなげたりクラスタ構成を組んだりすると、プロセスには親子関係が発生します。これをツリー状にまとめてプロレスグループとよび、PGID という ID で管理します。ps コマンドで PGID およびツリー構造の把握ができます。以下の例で nginx の master と worker について PID は異なりますが PGID は共通です。

    $ ps axjf
    PPID   PID   PGID  SID  TTY   TPGID STAT   UID   TIME COMMAND
    ...
       1   2598  2598  2598 ?        -1 Ss       0   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
     2598  2599  2598  2598 ?        -1 S      598  11:30  \_ nginx: worker process
    

    pstree コマンドでも同様のことが行えます。

    pstree
    

    GNOME ディスプレイマネージャー gdm の子プロセスのみを確認する例

    pstree `pidof gdm3`
    

    デバイス管理ツール udev のデーモンプロセス

    pstree `pidof systemd-udevd`
    
    Likeボタン(off)0
    詳細設定を開く/閉じる
    アカウント プロフィール画像

    業務ではデータベース設計とSQL最適化を担当

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事

      • 使い所が難しいマイナーな運用コマンド
        コマンドのエイリアスを登録する (update-alternatives) mybin という名前のコマンドを登録 sudo update-alternatives --install /usr/local/bin/mybin mybin /usr/bin/echo 10 sudo update-alternatives --install /usr/local/bin/mybin mybin /...
        けんちゃんけんちゃん11/1/2022に更新
        いいねアイコン画像0
      • ipコマンドの基本的な使い方
        ネットワーク関連のコマンドはたくさんあります。しかしながら、その一部は ip コマンドに集約できます。 基本形 ("man ip" より抜粋) $ ip OBJECT COMMAND OBJECT: link, neigh, addr, route (等) COMMAND: show, add, delete (等) データリンク層のネットワークデバイス情報 (ifconfigコマンドの代用) M...
        こもれびさんこもれびさん2/8/2017に更新
        いいねアイコン画像0
      • rpmとyumのチートシート
        サムネイル画像-f69c6665b8
        rpm (RedHat Package Manager または RPM Package Manager) はRedHat系のパッケージ管理ツールで、yum (Yellowdog Updater Modified) は内部的にrpmを実行するメタパッケージ管理ツールです。rpmには柔軟性がありyumには利便性があります。 rpmは "rpmパッケージファイル" があれば何でもインストールできますが、...
        まるたんまるたん2/2/2022に更新
        いいねアイコン画像0
      • メモリおよびディスクリソースを調査するために便利なコマンドおよび周辺知識
        メモリ使用量を表示 (free) 既定ではキロバイト単位で表示されます。オプション "-b", "-k", "-m", "-g" を付与して実行するとそれぞれバイト、キロ、メガ、ギガで表示されます。 $ free total used free shared buffers cached Mem: 510824 ...
        しおまめしおまめ8/30/2017に更新
        いいねアイコン画像0
      • 運用時に大活躍する必須コマンド
        ファイル内容を再帰的に検索 (grep) find コマンドはファイル名についてディレクトリを再帰的に検索します。ファイルの内容について指定したディレクトリ以下を再帰的に検索するためには grep に -r オプションを付与します。その際 -n および -i オプションも付与しておくと便利です。未来創発 NRI grep です。 $ grep -nri "pattern" dir -n (--li...
        ねこねこ9/7/2021に更新
        いいねアイコン画像0