我想知道为什么我在Bash shell的后台进程中看到了不同的行为
案例1:使用Putty(SSH)登录Unix服务器
它给了我工作号码.现在我通过点击putty窗口中的x来杀死我的会话现在打开另一个会话并尝试查找进程...该进程已经死亡.
案例2:案例1:使用Putty(SSH)登录Unix服务器默认情况下,它使用csh shell
这里的Diff是..而不是直接执行sleep命令我将sleep命令存储在文件中并执行文件.
现在我通过点击putty窗口中的x来杀死我的会话现在打开另一个会话并尝试查找进程...过程仍然存在
不知道为什么会这样.我认为我需要在bash中使用,即使在注销后也要运行该过程.
在父进程id中看到一个差异.在第二种情况下,sleep 2000的父进程id变为1.看起来只要mysleep.sh的进程死了,内核就将父进程分配给1.
Ste*_*ker 20
这里的差异确实是干预过程.当您关闭终端窗口时,会向其中运行的进程发送HUP信号(与"nohup"相关,如提到的a0nymo0usc0ward).接收HUP的默认操作是死 - 来自signal(3)联机帮助页,
No Name Default Action Description
1 SIGHUP terminate process terminal line hangup
Run Code Online (Sandbox Code Playgroud)
在您的第一个示例中,睡眠过程直接接收此HUP信号并死亡,因为它未设置为执行任何其他操作.(某些进程捕获HUP并使用它来执行某些操作,例如重新读取一些配置文件)
在第二个示例中,运行shell脚本的shell进程已经死亡,因此睡眠过程永远不会获得信号.在UNIX中,由于wait(2)系列调用的工作原理以及一般的处理过程,每个进程都必须有一个父进程.因此,当父进程终止时,内核会将其作为寄养子项提供给init(pid 1,如您所述). Orphan进程(在维基百科上)提供了更多有关它的信息,另请参阅Zombie进程以获取一些其他技术细节.
^ z
bg
disown%<jobid>
nohup script.sh&
根据您的需要,
有两个选项[会有更多;-)]
ssh remotehost'nohup /path/to/script.sh </dev/null
> nohup.out 2>&1&'
要么
使用'屏幕'
归档时间: |
|
查看次数: |
14639 次 |
最近记录: |