我在linux shell中执行了下面的命令:
$ nohup run &
这里run
是一个阻塞命令。然后我关闭外壳,开始一个新的。然而,在新的shell中,我不能通过fg
将任务带到前台,也不能通过jobs
看到它。还有办法把它带到前台吗?
用screen
代替nohup
:
screen -dmS demo bash -c 'while ! read -t 1;do echo $((i++));done'
注:没有&
.
然后退出…稍后,您可以:
screen -x demo
按Ctrl+a,然后按d使控制台运行
或
gnome-terminal -e 'screen -x demo'
然后,简单地关闭窗口,使进程继续运行。
据我所知,run
是shell的子进程,当shell
关闭时,run
也关闭。也许使用tmux
或screen
可以实现你想要的。
有很多同样的问题。如果你想杀死它,我通常做的是
top | grep {command_name} | grep {user_name}
,如果您等待,后台进程将显示。第一列是pid,所以你可以
kill -9 {pid}
请注意,它还会对包含字符串"run"的所有其他命令和统计信息进行grep,因此您应该仔细检查它是否是您真正想要的。(命令名通常在最后一列)
例如,假设您正在使用AWS AMI,其默认用户名是ec2-usertop | grep run | grep ec2-user
得到类似
的输出371 ec2-user 20 0 110m 2668 2664 S 0.0 0.0 0:00.00 run-helper.sh
run-helper.sh不是"run"命令,所以你不应该杀死371