当前位置 博文首页 > ChenYX的博客:云上python:【三】Linux下程序持续运行与杀死程

    ChenYX的博客:云上python:【三】Linux下程序持续运行与杀死程

    作者:[db:作者] 时间:2021-07-07 18:46

    目录

    一、 设定程序持续运行

    1. nohup? :不挂断地运行命令

    2.? &? :持续在后台运行

    二、 关闭后台运行的程序

    1.? jobs? :查看运行的后台进程

    2.? ps(Process Status)? 列出系统中当前正在运行的进程

    ①.? ps -ef? :用标准的格式显示进程

    ②.? ps aux? :用BSD的格式来显示

    ②.? grep? :复合查找

    3.? kill? :杀死该进程


    一、 设定程序持续运行

    1. nohup? :不挂断地运行命令

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

      ? ? 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

      ? ? 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

      ? ? 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

    退出状态:该命令返回下列出口值:?  

      ? ? ? ? ? 126 可以查找但不能调用 Command 参数指定的命令。?  

      ? ? ? ? ? 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。?  

      ? ? ? ? ? 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

    2.? &? :持续在后台运行

    & 一般和nohup两个一起用,表示在后台一直运行:

    nohup command &

    举例说明:

    nohup python login.py >> mylog.log 2>&1 &
    • &:? ?即使terminal(终端)关闭,或者电脑死机程序依然运行;?
    • 2>&1:? ?这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入指定文件里面,所以结果是标准错误和标准输出都导入到指定文件里面了。
    0表示stdin标准输入
    1表示stdout标准输出
    2表示stderr标准错误
    > file表示将标准输出输出到file中,也就相当于 1>file
    2> error表示将错误输出到error文件中
    2>&1也就表示将错误重定向到标准输出上
    2>&1 >file错误输出到终端,标准输出重定向到文件file,等于 > file 2>&1(标准输出重定向到文件,错误重定向到标准输出)。
    • >> mylog.log:? 表示指定输出导入该文件

    二、 关闭后台运行的程序

    如果需要关闭后台挂起的程序,首先要查看该线程的编号,下面介绍两种查询方式:

    1.? jobs? :查看运行的后台进程

    当我们用nohup和&将程序挂在后台后,如果需要需要在当前终端查询后台程序,可以输入jobs进行查看:

    注意:jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了。我们重新打开putty登录尝试:

    可以发现,jobs已经无法查询到任何后台进程,因为我们刚刚重开了一个terminal,而jobs只对当前terminal有效。?

    如果需要在新的terminal里查看进程号,需要利用ps(进程查看命令)进行查询:

    2.? ps(Process Status)? 列出系统中当前正在运行的进程

    ①.? ps -ef? :用标准的格式显示进程

    UID用户ID、但输出的是用户名?
    PID进程的ID?
    PPID父进程ID?
    C进程占用CPU的百分比?
    STIME进程启动到现在的时间?
    TTY

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?该进程在哪个终端上运行。?

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?若与终端无关,则显示?

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?若为pts/0等,则表示由网络连接主机进程。

    CMD?命令的名称和参数

    ②.? ps aux? :用BSD的格式来显示

    USER用户名?
    CPU进程占用的CPU百分比?
    MEM占用内存的百分比
    VSZ?该进程占用的固定內存量(KB)(驻留中页的数量)?
    RSS进程启动到现在的时间?
    STAT进程的状态
    START该进程被触发启动时间
    TIME该进程实际使用CPU运行的时间

    ②.? grep? :复合查找

    既然可以用ps列出当前进程了,那我们使用grep查找,指定查找python运行程序:

    ps -ef |grep python

    ?同理,也可以使用aux去指定查找:

    ps aux |grep python

    ?

    如果我们只想提取进程号,可以用awk对其进行指定:

    注:用ps -def | grep查找进程很方便,最后一行总是会grep自己

      用grep -v参数可以将grep命令排除掉

    3.? kill? :杀死该进程

    如果该进程可以用jobs查找,可以直接指定关闭:

    kill %i (i为jobs里的编号)

    如果已经更换了terminal,就是用ps查询进程号后再杀死该进程:

    kill -9? 进程号

    可以发现,后台的进程已经被杀死了。


    本文参考资料:

    https://www.cnblogs.com/baby123/p/6477429.html

    https://blog.csdn.net/weixin_34227447/article/details/91899900

    https://www.cnblogs.com/mydriverc/p/8303242.html


    如有疑问或错误,欢迎和我私信交流指正。
    W.By ChenYX,未经授权,请勿转载!

    over~

    cs
    下一篇:没有了