Linux 父进程没有';t使用cd xxx时退出&&;nohup sh xx.sh&;
我昨晚遇到了这个奇怪的问题,但仍然没有任何线索。事情是这样的: 我得到了两个名为Linux 父进程没有';t使用cd xxx时退出&&;nohup sh xx.sh&;,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我昨晚遇到了这个奇怪的问题,但仍然没有任何线索。事情是这样的: 我得到了两个名为parent.sh和child.sh的进程,它应该是parent.sh启动child.sh,然后parent.sh退出,而child.sh仍在运行。(parent.sh与apachectl或/etc/init.d/xxx 父.sh中的代码 #!/bin/bash echo 'start child.sh' cd $HOME && nohup sh child.sh & #!/bin/bas
parent.sh
和child.sh
的进程,它应该是parent.sh
启动child.sh
,然后parent.sh
退出,而child.sh
仍在运行。(parent.sh
与apachectl
或/etc/init.d/xxx
父.sh中的代码
#!/bin/bash
echo 'start child.sh'
cd $HOME && nohup sh child.sh &
#!/bin/bash
while true;
do
echo 'child process';
sleep 10
done
在child.sh中编码
#!/bin/bash
echo 'start child.sh'
cd $HOME && nohup sh child.sh &
#!/bin/bash
while true;
do
echo 'child process';
sleep 10
done
在我运行sh parent.sh
之后,似乎parent.sh
已经退出,因为我受到了重击。不幸的是,当我运行ps-ef | grep parent.sh
时,它仍然在那里,有一个父进程init
,子进程child.sh
也在运行
在检查了parent.sh
之后,我发现如果我更改此行:
cd $HOME && nohup sh child.sh &
到
然后父进程将在启动子进程后退出
为什么?猜测第一种情况下,整个复杂命令放在后台,但只有child.sh
进程与父进程分离,因此运行cd
的shell仍然存在,直到child.sh
退出。第二种情况下,cd
发生在父shell中,然后nohup
处理s被分离,因此在父shell上下文中没有任何东西可以继续运行。但这都是假设。nohup sh-c“cd$HOME&&sh child.sh”&
工作正常吗?(如果脚本是bash脚本,则使用bash
而不是sh
)感谢您的回复,sh-c
将丢失环境变量cd$HOME
。受您启发,我认为以下是cd$HOME&&nohup sh child.sh&
的工作原理:此命令中的&
将使整个命令cd$HOME&&nohup sh child.sh
在后台运行,将e> 将parent.sh
添加到后台,因此我将在终端中获得一个新的bash。然后,因为在nohup sh child.sh
之后没有&
(原始的$
适用于parent.sh),因此,nohup sh child.sh
将不会退出,因此background.sh将不会退出并保留在后台。该nohup建议中的$HOME
将在运行前由当前shell展开。请注意双引号。第一种情况下,整个复杂命令将放在后台,但仅放在子命令中。sh
进程与父进程分离,因此运行cd
的shell仍然存在,直到child.sh
退出。第二次cd
发生在父shell中,然后分离nohup
进程,因此在父shell上下文中没有任何东西可以继续运行。但这都是假设。nohup sh-c“cd$HOME&&sh child.sh”&
是否正常工作?(如果脚本是bash脚本,则使用bash
而不是sh
)感谢您的回复,sh-c
将丢失环境变量cd$HOME
。受您启发,我认为以下是cd$HOME&&nohup sh child.sh&
的工作原理:此命令中的&
将使整个命令cd$HOME&&nohup sh child.sh
在后台运行,将nohup sh child.sh
之后没有&
(原始的$
适用于parent.sh),因此,nohup sh child.sh
将不会退出,因此background.sh将不会退出并保留在后台。该nohup建议中的$HOME
将在运行前由当前shell展开。请注意双引号。第一种情况下,整个复杂命令将放在后台,但仅放在子命令中。sh
进程与父进程分离,因此运行cd
的shell仍然存在,直到child.sh
退出。第二次cd
发生在父shell中,然后分离nohup
进程,因此在父shell上下文中没有任何东西可以继续运行。但这都是假设。nohup sh-c“cd$HOME&&sh child.sh”&
是否正常工作?(如果脚本是bash脚本,则使用bash
而不是sh
)感谢您的回复,sh-c
将丢失环境变量cd$HOME
。受您启发,我认为以下是cd$HOME&&nohup sh child.sh&
的工作原理:此命令中的&
将使整个命令cd$HOME&&nohup sh child.sh
在后台运行,将nohup sh child.sh
之后没有&
(原始的$
适用于parent.sh),因此nohup sh child.sh将不会退出,因此background.sh将不会退出并保留在后台。该nohup建议中的$HOME
将在运行前由当前shell展开。请注意双引号。