プロセスIDが1になるのはシェルかコマンドか

/bin/sh -c "コマンド一つ"というコンテナのケースで、シェルがBashかdashかで違いが生じる。

なお、CentOS7で/bin/sh/bin/bash、Ubuntu18.04で/bin/sh/bin/dashにリンク。

# CentOS7(Bash): コマンド一つの場合
docker run --rm -it centos:7 \
  /bin/sh -c "ps -A --format pid,ppid,user,args,etime"
  PID  PPID USER     COMMAND                         ELAPSED
    1     0 root     ps -A --format pid,ppid,use       00:01

# CentOS7(Bash): コマンド二つの場合
docker run --rm -it centos:7 \
  /bin/sh -c "echo ; ps -A --format pid,ppid,user,args,etime"
  PID  PPID USER     COMMAND                         ELAPSED
    1     0 root     /bin/sh -c echo ; ps -A --f       00:00
    7     1 root     ps -A --format pid,ppid,use       00:00

# Ubuntu18.04(dash): コマンド一つの場合
docker run --rm -it ubuntu:18.04 \
  /bin/sh -c "ps -A --format pid,ppid,user,args,etime"
  PID  PPID USER     COMMAND                         ELAPSED
    1     0 root     /bin/sh -c ps -A --format p       00:01
    7     1 root     ps -A --format pid,ppid,use       00:00

上記のように、dashではコマンド一つでも別プロセスとなる。shell形式とexec形式の違いも参照。

プロセスID1がどのプログラムなのかはその終了処理に影響する(コンテナ終了シグナルとSTOPSIGNAL)。