zoukankan      html  css  js  c++  java
  • 后台运行命令nohup、job 等


    nohup 命令用于把命令放在系统后台来执行,关闭命令所在的控制台和注销所有的用户都不会有影响
    例如:
    nohup java -jar X.jar >/dev/null &


    job内容来自http://blog.chinaunix.net/uid-22969800-id-3063095.html,非常精辟,我摘选部分如下:

    Linux下面Job Control的一些知识(包括jobs、bg、fg、kill命令的使用)
    1.通过使用‘&’操作符让Job在后台运行(在后台就不会被ctrl+c中断,但是输出仍然会显示到屏幕上,有点讨厌啊)
    例如:
    user@host:~$ cp /media/bigfile /home/user/Downloads/ &
    [1] 3526
    user@host:~$
    用方括号括起来的数字,表示系统分配给这个Job的Job Number,这里'[1]'中的1,就是这个Job的Job Number。而后面一个比较大的数字,则是系统分配的进程ID(PID),这个PID在系统就代表这个进程。


    2.使用jobs命令,来查看当前系统中的Job

    user@host:~$ jobs
    [1]-  Running                 cp /media/bigfile /home/user/Downloads/ &
    [2]+  Stopped                 cat
    user@host:~$

    这里‘Running’、‘Stopped’表示任务的状态。
    语法:jobs [-p | -l] [-n] [-p] [-x] [job id]
    参数:
    -p | -l : Report the process group ID and working directory of the jobs.
    -n      : Display only jobs that have stopped or exited since last notified.
    -p      : Displays only the process IDs for the process group leaders of the selected jobs.
    -x      : Replace any job_id found in command or arguments with the corresponding
               process group ID, and then execute command passing it arguments.
    job id  : The job id.

    3.Suspend key 和 bg命令的使用(将一个正在运行的job放到后台运行)
    Suspend Key,通常是Ctrl-Z将该任务挂起(也就是暂停),然后使用‘bg’命令在后台让该job恢复执行。

    user@host:~$ cp bigfile bigfile.bac
    ^Z
    [1]+  Stopped                 cp bigfile bigfile.bac
    user@host:~$ bg %1
    [1]+ cp bigfile bigfile.bac &
    user@host:~$


    4.使用fg命令,将在后台的job换到前台
    user@host:~$ cp bigfile bigfile.bac &
    [1] 3815
    user@host:~$ fg 1
    cp bigfile bigfile.bac

    5.如何结束一个job
    如果你想结束一个正在运行的job,可以使用中断键(interrupt key,通常是Ctrl-C)来结束。
    user@host:~$ cp bigfile bigfile.bac
    ^C
    user@host:~$
    如果上面方法无法正常工作,那么你可以考虑使用Ctrl-Z(Suspend key)来暂停job,使用'jobs'命令来查看这个job的job number,然后通过'kill'命令来结束这个job.
    user@host:~$ cp bigfile bigfile.bac
    ^Z
    [1]+  Stopped                 cp bigfile bigfile.bac
    user@host:~$ jobs
    [1]+  Stopped                 cp bigfile bigfile.bac
    user@host:~$ kill %1
    user@host:~$
    [1]+  Terminated              cp bigfile bigfile.bac
    'kill %1'中的'%'告诉系统,后面的数字是一个job number。默认情况下,kill将会向程序发送一个termination signal(-TERM)。如果这个信号不起作用,考虑使用'kill -kill %job number'来发送一个kill signal(-KILL)。
    'kill'命令的使用,就看man把,info也可以,这里不说了,上面东西太多。不过常用的也就'kill %job number'、'kill -kill %job number'、'kill [-kill] PID'。

    Linux下Ctrl-Z、Ctrl-C、Ctrl-D的具体含义
    初识Linux,可能会对Ctrl-Z、Ctrl-C、Ctrl-D的具体含义混淆不清,因为这三个按键都能够在一些情况下使shell退出正在执行的命令或程序,提示用户输入下一个命令,从而对初识者造成假象,认为三个键的功能一样,但具体情况下哪个按键能起作用、起什么作用却拿捏不定。

        Ctrl-Z:该键是linux下面默认的挂起键(Suspend Key),当键入Ctrl-Z时,系统会将正在运行的程序挂起,然后放到后台,同时给出用户相关的job信息。此时,程序并没有真正的停止,用户可以通过使用fg、bg命令将job恢复到暂停前的上下文环境,并继续执行。
        Ctrl-C:该键是linux下面默认的中断键(Interrupt Key),当键入Ctrl-C时,系统会发送一个中断信号给正在运行的程序和shell。具体的响应结果会根据程序的不同而不同。一些程序在收到这个信号后,会立即结束并推出程序,一些程序可能会忽略这个中断信号,还有一些程序在接受到这个信号后,会采取一些其他的动作(Action)。当shell接受到这个中断信号的时候,它会返回到提示界面,并等待下一个命令。
        Ctrl-D:该键是Linux下面标准输入输出的EOF。在使用标准输入输出的设备中,遇到该符号,会认为读到了文件的末尾,因此结束输入或输出。


    -----------------------------------------------------------------------------------------------------------
    分割线以上内容非常不错,个人总结如下:
    1.jobs 只限于某个控制台,控制台间彼此不通用,a控制台中的job ,在b控制台用jobs 看不到 ,但是用ps -aux 可以看到相应进程
    2.job 不管是在前台还是在后台,也不管什么状态,其依赖于所在的控制台,关闭控制台后所有job 将不复存在
    3.job在后台运行时,不会被ctrl+c中断,但是输出仍然会显示到屏幕上


     

  • 相关阅读:
    【网络与系统安全】20179209 利用metasploit对windows系统的渗透
    2017-2018-1 20179209《Linux内核原理与分析》第五周作业
    【网络与系统安全】20179209 木马的利用
    2017-2018-1 20179209《Linux内核原理与分析》第四周作业
    【网络与系统安全】20179209 wireshark和nmap实验
    2017-2018-1 20179209《Linux内核原理与分析》第三周作业
    20179209课后作业之od命令重写
    ORA-12505 错误解决
    linux_memcached_memcachedb
    linux_jvm_jmap_dump内存分析
  • 原文地址:https://www.cnblogs.com/ventry/p/2534433.html
Copyright © 2011-2022 走看看