• nohup &的用法、进程查看以及终止


    1.nohup

    用途:不挂断地运行命令。如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。

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

    • 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
    • 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
    • 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

    退出状态:该命令返回状态如下   

    • 126 可以查找但不能调用 Command 参数指定的命令。   
    • 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
    • 除此之外,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

    2.&

    用途在后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出

    3.nohup与&一起使用

    nohup与&合在一起会让命令永久的在后台执行

    语法nohup COMMAND &

    eg: nohup command > myout.file 2>&1 &   

    其中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ,在该例中 2>&1是将标准错误重定向到标准输出,标准输出再被重定向输入到myout.file文件中。

     4.测试

    测试文件 mylog.sh

    1 #!/bin/bash
    2 
    3 index=0
    4 while [ 1 ]
    5     do 
    6         echo mylog $index
    7         index=$[ index+1 ]
    8         sleep 1s
    9     done

      测试四种情况:

    执行命令 状态
    ./mylog.sh 结果会输出到终端
    使用Ctrl + C发送SIGINT信号或关闭session发送SIGHUP信号,程序关闭                                                         
    ./mylog.sh & 结果会输出到终端
    使用Ctrl + C发送SIGINT信号,程序免疫                                                        
    关闭session发送SIGHUP信号,程序关闭
    nohup ./mylog.sh 结果默认会输出到nohup.out
    使用Ctrl + C发送SIGINT信号,程序关闭
    关闭session发送SIGHUP信号,程序免疫
    nohup ./mylog.sh & 同时免疫SIGINT和SIGHUP信号

    测试过程

    1.使用./mylog.sh

    2.使用./mylog.sh &

     使用ctrl+c发送SIGINT信号,程序免疫

    关闭终端窗口,查看程序,程序关闭

    3.使用nohup ./mylog.sh

    使用ctrl+c,程序关闭,输出信息被保存到当前目录nohup.out文件中

     

    关闭终端窗口,查看程序,程序免疫

     4.使用nohup ./mylog.sh &

    使用ctrl+c,程序免疫

     

    关闭终端窗口,程序免疫

    只有通过kill杀掉进程

     

    总结

    &是把你执行的命令放在后台执行,使用ctrl+c也终止不了这个命令的执行,除非是kill进程或者关闭窗口,才会终止这个命令
    使用nohup会将命令的输出重定向到nohup.out文件中,使用ctr+c可以终止该命令的执行,关闭窗口不能
    一般使用nohup   you_command $   ,这样命令的输出会被保存到nohup.out中,除了你执行命令的机器出问题,其他相关的出问题都不会影响你的执行

    常用任务管理命令

    # jobs      //查看任务,返回任务编号n和进程号

    # bg  %n   //将编号为n的任务转后台运行

    # fg  %n   //将编号为n的任务转前台运行

    # ctrl+z    //挂起当前任务

    # ctrl+c    //结束当前任务

     

  • 相关阅读:
    排列组合之全排列
    Shell脚本学习指南 [ 第一、二章 ] 背景知识、入门
    Scala基础知识[一]
    Hadoop JVM调整解决 MapReduce 作业超时问题
    PL_SQL学习
    Oracle实用操作
    Fernflower 反编译.class文件
    Java命名规范
    Oracle学习笔记1
    JDBC连接MySQL与Oracle
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12073028.html
Copyright © 2020-2023  润新知