Bash

儘管等待並殺死(bash),但仍會產生無限數量的程序

  • March 9, 2021

這段程式碼應該是一個保持活動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如何修復此程式碼?

這不起作用/bin/sh,切換到/bin/bash它應該。

引用自:https://unix.stackexchange.com/questions/638129