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)