В классической модели программирования Unix нет способа сделать это. Вместо этого программы могут пытаться охватить все возможные FD и попытаться закрыть их:
(
limit=$(ulimit -n)
# Try to estimate some upper bound if not set
[ "$limit" = "unlimited" ] && limit=1024
for ((i=0; i<limit; i++))
do
[ "$i" != 2 ] && exec {i}>&-
done
exec node ./index.js
)
Однако большинство ОС имеют способ для проверки открытых FD. Например, Linux позволяет вам:
(
for fd in "/proc/$BASHPID/fd"/*
do
fd="${fd##*/}"
[ "$fd" != 2 ] && exec {fd}>&-
done
exec node ./index.js
)
Вы можете sh оставить открытыми 0 и 1 и / или перенаправить их с / на /dev/null
, так как некоторые программы не справляются хорошо, когда stdin и stdout закрыты.