ubuntu后台运行与查看程序的多种详细方法

跑大网络时,经常需要挂网络应该怎么挂

方法1:使用&
方法2:使用nohup
方法3:使用nohup与&组合等(见nohup中第6部分的示例介绍)
方法4:使用screen

一、使用&

一般在执行shell命令的时候我们在命令的后面加上一个‘&’,这样就可以使得该程序在后台运行。

&为后台运行意思,一般在执行命令后面加上&便可

比如:

python A.py &

但是&有一定局限性:
当程序运行起来之后依旧会再次在shell中输出打印信息,shell依旧被占用,关闭shell则程序退出;这个时候我们可以使用ctrl+z命令,使得这个信息消失,可以做别的事情,但是关闭shell的时候程序依旧会退出,因此这些办法都不能解决问题。
由此需要nohup来解决。

二、nohup的介绍与使用

1.简介

nohup的意思就是:永久执行,是no hang up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。nohup用于不挂断地运行命令。nohup在不规定的情况下,所以输出内容会到nohup.out中。

nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响运行,注意了nohup没有后台运行的意思;&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。

2.相关介绍(对后面命令书写有作用)

操作系统中有三个常用的流:

0标准输入流 stdin,用户键盘输入的内容
1标准输出流 stdout ,输出到显示屏的内容
2标准错误流 stderr,报错内容
一般当我们用 >result.txt,实际是 1>result.txt的省略用法;< result.txt ,实际是 0 < result.txt的省略用法。

3.语法(用法)

语法:nohup Command [ Arg … ] [ & ]
例如:

nohup python A.py &

Command 为我们要执行的指令,无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态出口值:
  126 可以查找但不能调用 Command 参数指定的命令。   
  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   
  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

4.局限性

仅仅使用nohup命令能保证程序忽略挂起信号一直运行,但是输出还是会在终端和默认的当前目录的 nohup.out输出,关闭终端的时候不会结束程序,这样不是很优雅,最好的方式是在nohup后面加上&,这样就是最佳的执行方式了。

5.指令

5.1 2>&1

2>&1是一个整体,是将标准错误(2)重定向到标准输出(&1),即将错误内容重定向输入到标准输出中去。

注:左右不能有空格,&是为了区别文件1和1(标准输出)

5.2 &1

标准输出(&1)再被重定向输入到目标文件中。

6.示例介绍

示例1
nohup python A.py >> /home/my.log 2>&1 &

2&>1见5.1介绍,>>追加的意思。
语句意思:以python环境不间断的运行my.py这个脚本,并且将脚本输出的内容重定向输入my.log中(以追加方式)。
根据前面的介绍,可知上面语句可拆分下面这两命令:

nohup python A.py 1>> /home/my.log &
nohup python A.py 2>> /home/my.log &
示例2
nohup python -u A.py >> /home/my.log 2>&1 &

-u 参数,使得python不启用缓冲,这样子out.log才可以马上看到输出。
跟示例1是一样的意思。

示例3
nohup python A.py > /home/my.log 2>&1 &

跟示例1的区别就是将==>>改为>==,两者差异在于
>>为追加内容,而>会覆盖源文件内容,也可能让其中的内容清空
一般推荐使用第1示例。

示例3

三、Screen

详细操做文档可见http://www.vpser.net/manage/screen.html

1.简介

Screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。

2.安装

ubuntu下安装:
apt-get install screen

3.相关操作

3.1 创建screen会话
screen -S myscreen1 

screen就会创建一个名字为myscreen1的会话。

3.2 暂时离开,保留screen会话中的任务或程序

当需要临时离开时(会话中的程序不会关闭,仍在运行)可以用快捷键Ctrl+A+D(即按住Ctrl,依次再按A,D)

3.3 恢复screen会话

当回来时可以再执行执行:

screen -r myscreen1

即可恢复到离开前创建的lnmp会话的工作界面。如果忘记了,或者当时没有指定会话名,可以执行:

screen -ls screen

会列出当前存在的会话列表,11791.myscreen1即为刚才的screen创建的myscreen1会话,目前已经暂时退出了myscreen1会话,所以状态为Detached,当使用screen -r lnmp后状态就会变为Attached,11791是这个screen的会话的进程ID,恢复会话时也可以使用:screen -r 11791

3.4 关闭screen的会话

执行:

exit 

会提示:[screen is terminating],表示已经成功退出screen会话。

3.5远程演示

首先演示者先在服务器上执行

screen -S test 

创建一个screen会话,观众可以链接到远程服务器上执行screen -x test 观众屏幕上就会出现和演示者同步。

screen -d -r myscreen1

结束当前session并回到myscreen1这个session

screen介绍来源于【VPS侦探 https://www.vpser.net/

四、后台查看

ubunut下查看后台进程

1.jobs

jobs -l

jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了。也就是说如果你的网或者你关闭链接时,当你再次进入时用jobs -l看不到之前运行的程序运行进程。

2.ps(推荐)

Process State 是非常强大的进程查看命令,用于报告当前系统的进程状态。直接输入ps便可查看,ps还有许多功能,比较常用选项:
BSD风格
a——和终端有关的进程
x——和终端无关的进程
u——显示进程的执行者
sys V风格
-e——查看所有进程
-l——long,长格式
-f——full,详细信息
-o——指定输出格式
常用命令
ps #查看隶属于自己的进程

ps -l(ps -u)#仅查看隶属于自己进程的详细信息

更多课参考https://blog.csdn.net/wsxxdwwzjdy/article/details/78507698

3. pstree

linux系统中,每一个进程都是由其父进程创建的, 此命令以树状图的方式展现进程间的派生关系。常用命令:

pstree -p

显示当前所有进程的进程号和进程id

4.top

top是一个交互式系统性能监控工具,不同于ps是静态的结果输出,top可以实时动态地查看系统的整体运行情况。 通过top命令所提供的互动式界面,用热键可以管理。
使用:

# top

参考文献

参考文献1】|【参考文献2】|【参考文献3】|

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐