Tim*_*Tim 3 linux system-calls nohup
吉尔斯说
nohup 和 disown 都可以说是抑制 SIGHUP,但是方式不同。nohup 使程序最初忽略该信号(程序可能会改变这一点)。nohup 还尝试安排程序没有控制终端,这样当终端关闭时内核就不会发送 SIGHUP 信号。disown 纯粹是 shell 内部的;它导致 shell 在终止时不发送 SIGHUP。
$ nohup sleep 100 &
[1] 7882
nohup: ignoring input and appending output to 'nohup.out'
$ get-terminal-info-of-a-process.sh 7882
COMMAND CMD TT PID PPID CGNAME CGROUP PGID TPGID SESS SESSION OWNER
sleep 100 sleep 100 pts/5 7882 6780 systemd:/user.slice/user-10 7:pids:/user.slice/user-100 7882 7885 6780 c2 1000
$ tty
/dev/pts/5
Run Code Online (Sandbox Code Playgroud)
ed进程nohup仍然具有与调用 shell 相同的 tty: /dev/pts/5。所以我想知道Gilles所说的“nohup还尝试安排程序没有控制终端,这样当终端关闭时内核不会向它发送SIGHUP”是什么意思?
如果他说的是真的,如何nohup通过Linux API或系统调用函数实现将程序与控制终端分离?
谢谢。
正如我所说,运行的进程nohup肯定仍然与登录会话和控制终端相关联。毕竟,如果不是这样,那么忽略控制终端挂起的体术就没有意义了。
nohup是一个简单的链式加载程序,在链式加载目标程序之前,它会执行两件事:重定向标准输出并忽略挂断信号。
以下是来自 FreeBSD、NetBSD、OpenBSD和TENEX C shell的代码nohup。可以看出,没有对会话进行操作或控制终端。
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |