9y
- 可以使用 jobs 查看放到后台的任务的 ID, 然后使用 fg 将其移回前台, 不过, nohup 会重定向 stdout 和 stderr 到 nohup.out, 这一点, 即使你将任务移回了前台, 也不能使得 stdout 和 stderr 重回到终端(但是你可以 tail -f nohup.out).
- nohup 不能与当前终端 detach, 这点不如 screen 或者 tmux, 它仅仅是是你的程序忽略 SIGHUP信号(因此你关闭终端也不会使得刚才的任务结束, 参见当你关闭终端时, 会收到哪些信号), 这一点看 nohup 的名字就能看出.
- nohup 说白了作用纯粹就是让程序忽略 SIGHUP 信号使得终端关闭后程序不会结束, 并重定向 stdout 和 stderr, 如果你不使用 nohup 而仅仅是 ./myscript.sh & 那当终端关闭后, 程序就结束了.
- 既然如此, 如果我们关闭了当前终端, 那么我们就找不回刚才的那个 nohup 的任务了, 再重新打开一个终端然后运行 jobs, 你会发现没有任务, 很残酷. 因为任务本来是属于刚才那个终端的, 而你把那个终端关了再开一个终端, 任务也不会属于你新开的这个终端(实际上任务会归到刚才的那个终端进程的父进程下).
- 因此更好地选择是使用 screen, 或者 tmux
参考
使用 nohup 将任务放到后台之后, 如何将其移回前台 | Ecency