后台运行命令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中断,但是输出仍然会显示到屏幕上


 

原文地址:https://www.cnblogs.com/ventry/p/2534433.html