anthonyrisin..
40
守护进程?nohup的?屏幕?(tmux ftw,屏幕是垃圾;-)
只做其他应用程序从一开始就做的事情 - 双叉.
# ((exec sleep 30)&)
# grep PPid /proc/`pgrep sleep`/status
PPid: 1
# jobs
# disown
bash: disown: current: no such job
砰! 完成:-)我在所有类型的应用程序和许多旧机器上使用过无数次.您可以结合重定向和诸如此类的东西来打开您和流程之间的私人渠道.
创建为coproc.sh:
#!/bin/bash
IFS=
run_in_coproc () {
echo "coproc[$1] -> main"
read -r; echo $REPLY
}
# dynamic-coprocess-generator. nice.
_coproc () {
local i o e n=${1//[^A-Za-z0-9_]}; shift
exec {i}<> >(:) {e}<> >(:)
. /dev/stdin <
(("\$@")&) &$o 2>&$e
$n=( $o $i $e )
COPROC
}
# pi-rads-of-awesome?
for x in {0..5}; do
_coproc COPROC$x run_in_coproc $x
declare -p COPROC$x
done
for x in COPROC{0..5}; do
. /dev/stdin <
read -r -u \${$x[0]}; echo \$REPLY
echo "$x &\${$x[1]}
read -r -u \${$x[0]}; echo \$REPLY
RUN
done
然后
# ./coproc.sh
declare -a COPROC0='([0]="21" [1]="16" [2]="23")'
declare -a COPROC1='([0]="24" [1]="19" [2]="26")'
declare -a COPROC2='([0]="27" [1]="22" [2]="29")'
declare -a COPROC3='([0]="30" [1]="25" [2]="32")'
declare -a COPROC4='([0]="33" [1]="28" [2]="35")'
declare -a COPROC5='([0]="36" [1]="31" [2]="38")'
coproc[0] -> main
COPROC0
coproc[1] -> main
COPROC1
coproc[2] -> main
COPROC2
coproc[3] -> main
COPROC3
coproc[4] -> main
COPROC4
coproc[5] -> main
COPROC5
你去,产生什么.
"heredoc采购":
. /dev/stdin <
[...]
EOF
这适用于我曾尝试过的每一个shell,包括busybox/etc(initramfs).我以前从未见过它,我在刺激时独立发现它,谁知道源可以接受args?但是,如果存在这样的事情,它通常可以作为一种更易于管理的评估形式.
无论你的回答有多好,有时候SO上的某个人都不喜欢它并且会投票.最好不要担心太多. (7认同)
为什么要投票......如果这个问题已经过时了怎么办?考虑到其他11个答案很糟糕,这显然是相关的.这个解决方案是没有系统化的,过去30年来用于守护的惯用和可接受的方式,而不是毫无意义的应用程序,例如.nohup等. (2认同)