由于命令行耗时太久,突然想把进程挂后台走人怎么办?
01 前台转到后台
1. 输入ctrl + z 将该前台任务挂起
^Z
[1]+ Stopped XXXXXXXX
2. 运行jobs命令,查看任务号(可以看到run.sh对应的任务号是1)
jobs -l #-l显示pid
[1] + suspended XXXX
3. 运行bg命令,将任务从前台转到后台,这里的任务就是1,
bg %1
4.jobs检查
jobs -l #-l显示pid
[1]+ Running XXXX
02 后台转到前台
1. 查看后台任务(同一终端)
jobs
[1] + running XXXXXXX
2. 运行fg命令,将任务从后台转到前台
fg %1
[1] + XXXXXX
重点是忘记Screen了,成本巨高,那就挂着开着吧,也没有nohup,这时候就要Ctrl+Z了。
仅在当前终端有效!其他的终端无法显示!
小结:通过 jobs 命令查看工作ID,使用 bg 命令可以把前台程序放入后台,使用 fg 命令可以把后台程序拉到前台,jobs、bg、fg 的配合使用能有效管理前后台任务。
是否可行?可
让程序无视 SIGHUP 信号的命令 nohup 与 disown
为了确保程序即使在终端断开链接后仍然可以在后台运行,需要用到 nohup 或者 disown 命令:
# 常见的 nohup 命令
nohup bash running.sh > file.out 2>&1 &
# 或者使用 disown -h 命令
bash running.sh > file.out 2>&1 & disown -h
但是确实不如screen啊!
最佳解决策略
1. 等
2. 进入screen吧,下次长记性!
幸好,我们可以转入screen,开心嘛?!
如何将进程移到screen?
1. Ctrl+Z进程
2. bg恢复进程在后台运行
3. 解除从属关系disown %1
启动一个screen -S or -r
查找进程PID jobs -l可查询
yum -y install reptyr
执行reptyr -T 132385 将进程移到该screen
但是,我们转到后台运行不影响当前终端退出,是可行的!
3 解除从属关系!
使用disown
命令。如果你已经使用bg
将一个任务放到后台,你可以使用disown
命令来移除这个任务与当前终端的关联。这样,当你退出终端时,任务不会收到SIGHUP
信号。在使用bg
后,你可以简单地输入disown
命令。解除从属关系disown %1即可。
使用 disown %1从shell中夺走所有权
disown %1
#不影响退出终端,亲测有效
使用`disown %1`从shell中夺走作业的所有权意味着,即使你退出shell,该作业也不会因为收到`SIGHUP`信号而被停止。然而,这个操作并不影响程序的正常执行逻辑。程序如果达到了它的自然结束点或遇到了使其停止的条件,它仍然会停止运行。
换句话说,`disown`命令只影响程序与终端会话之间的关系,防止终端关闭时向程序发送`SIGHUP`信号。它不会改变程序内部的逻辑。如果程序完成了它的任务,它就会像平时一样结束,无论它是否被`disown`。
所以说,没有screen也没关系呀!
总结
命令 | 用法 | 说明 |
---|---|---|
jobs | jobs -l | 查看任务详情pid等 |
bg | bg %工作ID | 将工作ID任务调入后台运行 |
fg | fg %工作ID | 将工作ID任务调入前台运行 |
kill | kill -n [ PID | %工作ID ] | 向任务发送信号 |
& | command-line & | 将任务立即放入后台运行 |
nohup | nohup command-line | 忽视 SIGHUP 信号 |
disown | command-line disown -h or disown %1 | 忽视 SIGHUP 信号 亲测disown %1有效 |
哈,可以下班了!下班啦!
标签:bg,jobs,任务,命令,001,linux,后台,disown From: https://blog.csdn.net/weixin_44874487/article/details/137435915