私はUbuntu 20.04を実行しています。 ~によるとhttps://lwn.net/Articles/531419/そしてhttps://stackoverflow.com/questions/3446727/how-does-linux-define-the-next-pid/3457108#3457108、割り当てられたPIDは連続的でなければなりません。ただし、これは新しく作成されたPID名前空間の場合には適用されません。ここで、最初のプロセスのPIDは1(もちろんそうでなければならない)で、次のプロセスのPIDは8です。奇妙なことは、PID 8以降のすべてのPIDが順次割り当てられることです。
$ sudo unshare --fork --pid --mount-proc bash
root@anon:/home/anon# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 9844 3840 pts/2 S 12:13 0:00 bash
root 8 0.0 0.0 11500 3364 pts/2 R+ 12:13 0:00 ps aux
それ以降の他のプロセスには、9、10、11...が割り当てられます。
最初はなぜ1から8に跳んだのだろうか。 PID 2-7を実行して占有する前に作成および終了した他のプロセスがある場合は、そのプロセスが何であるかをどうやってps aux
知ることができますか?探してみましたが、/var/log/syslog
役に立つものが見つかりませんでした。
答え1
最初はなぜ1から8に跳んだのだろうか。
Bashをインタラクティブモードで起動すると、プロンプトが表示される前にrcファイル(ログインシェルの場合は対応するシステム全体のファイル)を読み込み、実行します~/.bashrc
。~/.profile
/etc
これらのrcファイルを実行すると、実行されbash --norc
ず、ps
コマンドに予想されるPID 2が表示されます。
ps auxを実行する前にPID 2-7を占める別のプロセスが作成され終了した場合、そのプロセスが何であるかをどうやって知ることができますか?
実装するbash -x