尽管等待并终止,但仍会产生无限数量的进程(bash)

尽管等待并终止,但仍会产生无限数量的进程(bash)

这段代码应该是一个保持命令存活的守护进程nc。如果nc实例死了,那么守护进程应该重生它。

#!/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应该可以。

相关内容