3.1 nohup命令
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令. 该命令可以在你退出帐户/关闭终端之后继续运行相应的进程. nohup就是不挂起的意思.
我们现在开始启动服务 python pyserver.py,并且希望在后台运行.我们就可以使用nohup,命令如下:
1. nohup ./hello &
此时默认地程序运行的输出信息放到当前文件夹的nohup.out 文件中去,加不加&并不会影响这个命令。只是让程序前台或者后台运行而已
然后另外一个ssh中, 我们用pidof hello
来查看进程的pid信息, 显示出进程的pid为29738
接着我们关掉那个启动了hello
的ssh
, 重新用pidof hello
再次查看进程信息, 发现进程仍然存在
nohup命令 | 说明 |
---|---|
用途 | 挂断地运行命令 |
语法 | nohup Command [ Arg … ] [ & ] |
描述 | nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部 |
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符.
退出状态, 该命令返回下列出口值
退出值 | 描述 |
---|---|
126 | 可以查找但不能调用 Command 参数指定的命令 |
127 | nohup 命令发生错误或不能查找由 Command 参数指定的命令, 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态 |
3.2 screen命令
如果想在关闭ssh连接后刚才启动的程序继续运行怎么办, 可以使用nohup.
但是如果要求第二天来的时候. 一开ssh, 还能查看到昨天运行的程序的状态,
然后继续工作,这时nohup是不行了, 需要使用screen来达到这个目的.
虽然nohup很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了
其实我们可以使用一个更为强大的实用程序screen。流行的Linux发行版通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载
执行screen , 按任意键进入子界面;
我用./hello命令开始执行,如果下班了,但是想关闭ssh以后./hello继续运行,那么按ctrl+a再按d
这样暂停了子界面,会显示[detached]的字样,这时候 我回到了父界面;
用screen –ls查看目前子界面的状态screen -ls