Linuxのラッパーシェル実行時に子シェルをラッパーシェルのプロセスで実行する!(exec)

Linuxでラッパーシェルを作成して実行する場合に、子シェルをラッパーシェルのプロセスで実行します。

ラッパーシェルと子シェルを作成する!

以下のシェルを作成して動作を確認します。

$ cat do_sleep_noexec.sh 
#!/bin/bash
/home/usradmin/do_sleep_120.sh
/home/usradmin/do_sleep_240.sh
$ cat do_sleep.sh
#!/bin/bash
exec /home/usradmin/do_sleep_120.sh
exec /home/usradmin/do_sleep_240.sh
$ cat do_sleep_120.sh 
#!/bin/bash
sleep 120
$ cat do_sleep_240.sh 
#!/bin/bash
sleep 240

execを使用しないで子シェルを実行する!

execを使用しないで子シェルを実行すると、親シェルの「do_sleep_noexec.sh」と子シェルの「do_sleep_120.sh」が表示されます。

$ ps -ef | grep sleep | grep -v grep
usradmin    2220    1781  0 06:15 pts/0    00:00:00 /bin/bash ./do_sleep_noexec.sh
usradmin    2221    2220  0 06:15 pts/0    00:00:00 /bin/bash /home/usradmin/do_sleep_120.sh
usradmin    2222    2221  0 06:15 pts/0    00:00:00 sleep 120

execを使用しないで子シェルを実行する!

execを使用してシェルを実行すると、子シェルの「do_sleep_120.sh」のみが表示されます。子プロセスが生成されず実行されています。後続の「do_sleep_240.sh」は実行されないことに注意します。

$ ps -ef | grep sleep | grep -v grep
usradmin    2343    1781  0 06:26 pts/0    00:00:00 /bin/bash /home/usradmin/do_sleep_120.sh
usradmin    2344    2343  0 06:26 pts/0    00:00:00 sleep 120

おわりに

execを使用すれば、ラッパーシェル作成時に、プロセス数の増加を防ぐことができます。

関連記事

関連書籍(Amazon)