之前使用Linux总是会不当心按下Ctrl + z,而后就出现看不懂的状况,觉得程序忽然就没了,今天专门研究了下Linux下的几个快捷键和工做管理。html
其中找到一篇很不错的文章,大部分是里面转载的。linux
原文地址:http://blog.chinaunix.net/uid-26495963-id-3062757.htmlshell
Job是指在批处理的环境中,为完成某一任务而进行一系列操做的总称。在我的接触计算机的年代,批处理的环境已经不容见到了,只有一些特殊的行业和环境下还在使用这样的概念,仅在书本中接触过。
在Linux下,能够简单的把Job理解为,一个或多个经过Pipe连接的命令及其运行所完成的任务。
例如,我须要把当前的登陆的用户信息,记录到名字为LoginUser的文件中,那么我可能回执行下面命令来完成:
lennon@lennon-laptop:~$ who > LoginUser
那们就能够把从命令的执行到LoginUser文件输出的整个过程成为一个Job。ui
初识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。在使用标准输入输出的设备中,遇到该符号,会认为读到了文件的末尾,所以结束输入或输出。编码
特别注意:咱们在这里提到的“后台”是指在终端机模式下能够避免Ctrl + c中断的一个情景,并非放到系统的后台去。因此,工做管理的后台依旧和终端机有关,当你使用&放到后台时,中断结束了,那么工做也会被中断掉。 若是须要了解更多请查找nohup或者screen命令。spa
一般咱们Linux的终端中,运行某一命令时,终端老是等待某一特定的命令或程序运行完之后,给出一个提示,而后咱们才能继续运行下一个命令。若是咱们要运行一个比较耗时的命令,可是在该命令运行的同时还须要作另外的一些事,那该怎么办呢?
你能够经过在命令的后面加上一个‘&’操做符,来让一个任务在后台运行(注意这里是在后台运行)。(固然若是你是用GUI界面,你也能够从新打开一个窗口运行新的命令或程序)
例如,咱们须要拷贝一个比较大的文件,在拷贝的同时,还要作其余一些事情,那么在拷贝命令后面加上一个‘&’,让它在后台拷贝:
lennon@lennon-laptop:~$ cp /media/bigfile /home/lennon/Downloads/ &
[1] 3526
lennon@lennon-laptop:~$
此时,咱们能够看到在终端中,执行了某一命令后,给出了一些信息,而后就返回了,接着提示用户能够出入下一个命令了,这样程序或命令就在后台执行了。
在显示的信息中,用方括号括起来的数字,表示系统分配给这个Job的Job Number,这里'[1]'中的1,就是这个Job的Job Number。然后面一个比较大的数字,则是系统分配的进程ID(PID),这个PID在系统就表明这个进程。
在后台运行的job,当其运行完成之后,且输入回车后,会在终端中给出一个提示:
lennon@lennon-laptop:~$ rm Downloads/linux_11gR2_database_1of2.zip &
[1] 3666
lennon@lennon-laptop:~$
[1]+ Done rm Downloads/linux_11gR2_database_1of2.zip.net
若是咱们须要查看当前系统中,有那些job,使用‘jobs’命令:
lennon@lennon-laptop:~$ jobs
[1]- Running cp /media/bigfile /home/lennon/Downloads/ &
[2]+ Stopped cat
lennon@lennon-laptop:~$
如此时,显示个人系统中有2个job,一个是刚才的正在运行的拷贝命令([1]标识),一个是中止运行的cat命令([2]表示)。这里‘Running’、‘Stopped’表示任务的状态。
jobs命令参考
命令名称:jobs
使用权限:全部权限
命令描述:列出系统中的job。注意:不是全部的shell都能使用此命令
语法: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.unix
若是你在运行job前,并不知道该job的运行状况,但在job运行了之后,发现这个是耗时的任务,并想将其放入到后台运行,这样你能够在这个任务运行的同时,完成一些其余的事情,那么你能够这样作:
使用挂起键(Suspend Key,一般是Ctrl-Z)将该任务挂起(也就是暂停),而后使用‘bg’命令在后台让该job恢复执行。
lennon@lennon-laptop:~$ cp bigfile bigfile.bac
^Z
[1]+ Stopped cp bigfile bigfile.bac
lennon@lennon-laptop:~$ bg %1
[1]+ cp bigfile bigfile.bac &
lennon@lennon-laptop:~$
使用Ctrl-Z后,系统会将当前正在运行的job暂停,将其移至后台,给出用户改任务的提示(包括job number、状态、job),而后提示用户输入下一个命令。
在job挂起后,可使用‘bg’命令,让job恢复到刚才中断的地方继续运行并将其放到后台运行。使用‘bg %job number’来指定你须要对哪个job进行操做,这里‘%’告诉系统后面的数字是一个job number(不要‘%’可能也能够)。固然在系统中只有一个job的时候,你也能够忽略改参数。
bg命令参考:
命令名称:bg
使用权限:全部权限
命令描述:在后台恢复已中止的job继续运行。注意该命令不能在全部的Unix的shell下运行
语法:bg [-l] [-p] [-x] [job]
参数:
-l : Report the process group ID and working directory of the jobs.
-p : Report only the process group ID of the 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 : Specifies the job that you want to run in the backgroundcode
当你须要将在后台的job换到前台时,使用‘fg %job number’命令(也许不要‘%’也能够)。
lennon@lennon-laptop:~$ cp bigfile bigfile.bac &
[1] 3815
lennon@lennon-laptop:~$ fg 1
cp bigfile bigfile.bac
fg命令参考:
命令名称:fg
使用权限:全部权限
命令描述:将后台的任务移至前台,若是是该任务处于暂停状态,则恢复该任务的运行。
注意该命令不是在全部的shell中都能运行。
语法:fg [%job]
参数:
%job : Specifies the job that you want to run in the foreground.htm
5.如何结束一个job
若是你想结束一个正在运行的job,可使用中断键(interrupt key,一般是Ctrl-C)来结束。
lennon@lennon-laptop:~$ cp bigfile bigfile.bac
^C
lennon@lennon-laptop:~$
若是上面方法没法正常工做,那么你能够考虑使用Ctrl-Z(Suspend key)来暂停job,使用'jobs'命令来查看这个job的job number,而后经过'kill'命令来结束这个job.
lennon@lennon-laptop:~$ cp bigfile bigfile.bac
^Z
[1]+ Stopped cp bigfile bigfile.bac
lennon@lennon-laptop:~$ jobs
[1]+ Stopped cp bigfile bigfile.bac
lennon@lennon-laptop:~$ kill %1
lennon@lennon-laptop:~$
[1]+ Terminated cp bigfile bigfile.bac
kill格式为kill -signal %jobnumber
注意:这里的kill也能够结束进程,区别在于若是不加%直接接一个数字,那么毁直接kill掉PID为该数字的进程
signal表明一个信号,一般进程之间能够互相控制的,好比你能够关闭,或者从新启动软件。那么程序是如何互相管理的呢?
其实就是经过给予该进程一个信号(signal)去告知进程你想让它作什么。
'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'。