zoukankan      html  css  js  c++  java
  • Linux下的Job Control(转:http://blog.chinaunix.net/uid-26495963-id-3062757.html)

    一.Job的概念

    Job是指在批处理的环境中,为完成某一任务而进行一系列操作的总称。在个人接触计算机的年代,批处理的环境已经不容见到了,只有一些特殊的行业和环境下还在使用这样的概念,仅在书本中接触过。
    在Linux下,可以简单的把Job理解为,一个或多个通过Pipe链接的命令及其运行所完成的任务。
    例如,我需要把当前的登录的用户信息,记录到名字为LoginUser的文件中,那么我可能回执行下面命令来完成:
    lennon@lennon-laptop:~$ who > LoginUser
    那们就可以把从命令的执行到LoginUser文件输出的整个过程成为一个Job。

    二.Linux下面Job Control的一些知识(包括jobs、bg、fg、kill命令的使用)

    1.通过使用‘&’操作符让Job在后台运行
    通常我们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

    2.使用jobs命令,来查看当前系统中的Job
    如果我们需要查看当前系统中,有那些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.

    3.Suspend key 和 bg命令的使用(将一个正在运行的job放到后台运行)
    如果你在运行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 background.

    4.使用fg命令,将在后台的job换到前台
    当你需要将在后台的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.

    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 %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。在使用标准输入输出的设备中,遇到该符号,会认为读到了文件的末尾,因此结束输入或输出。

  • 相关阅读:
    21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
    34. Find First and Last Position of Element in Sorted Array
    leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses
    31. Next Permutation
    17. Letter Combinations of a Phone Number
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    oc 异常处理
    oc 类型判断
    oc Delegate
    oc 协议
  • 原文地址:https://www.cnblogs.com/asin-huang/p/4467012.html
Copyright © 2011-2022 走看看