这段代码应该是一个保持命令存活的守护进程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
应该可以。