待機および終了にもかかわらず、生成されたプロセスの数は無制限です。

待機および終了にもかかわらず、生成されたプロセスの数は無制限です。

このコードは、コマンドをアクティブに保つデーモンでなければなりませんncncインスタンスが死ぬと、デーモンは機能するはずです。更生それ。

#!/bin/sh
if [ "$1" != "__forked__" ]; then
    setsid "$0" __forked__ "$@" &
    exit
else
    shift
fi

trap 'echo "Clean up and exit"; kill $nc_pid; exit' TERM
exec > outfile
exec 2> errfile
exec 0< /dev/null

while true; do
    (nc -lkp 1234 -e /usr/bin/bash &>/dev/null) &
    nc_pid=$!
    wait $nc_pid
    kill $nc_pid &>/dev/null
done

このコードを実行すると、古いncインスタンスを終了せずに新しいインスタンスを作成し続けます。

logan      14443  0.0  0.0   2588  1860 ?        S    18:45   0:00 nc -lkp 1234 -e /usr/bin/bash
logan      14446  0.0  0.0   2588  1844 ?        S    18:45   0:00 nc -lkp 1234 -e /usr/bin/bash
logan      14449  0.0  0.0   2588  1900 ?        S    18:45   0:00 nc -lkp 1234 -e /usr/bin/bash
logan      14452  0.0  0.0   2588  1888 ?        S    18:45   0:00 nc -lkp 1234 -e /usr/bin/bash
logan      14455  0.0  0.0   2588  1880 ?        S    18:45   0:00 nc -lkp 1234 -e /usr/bin/bash
logan      14458  0.0  0.0   2588  1944 ?        S    18:45   0:00 nc -lkp 1234 -e /usr/bin/bash
logan      14461  0.0  0.0   2588  1880 ?        S    18:45   0:00 nc -lkp 1234 -e /usr/bin/bash
...

私が望むもの一つncいつでもインスタンスを使用できます。このコードを修正する方法は?

答え1

では動作しません/bin/sh。に切り替えると/bin/bash機能します。

関連情報