zoukankan      html  css  js  c++  java
  • Linux后台运行程序与后台任务管理

    # Linux后台运行程序与后台任务管理
    
    在Linux中任何命令或者脚本都可以在后台运行,本文介绍一下如何让一个脚本在后台运行以及如何管理后台任务。
    
    ## 0. 管理后台程序
    
    刚开始用Linux的时候,总会觉得终端开多少都不够用,那是因为每个作业都会占据一个终端。其实Linux提供了很方便的后台程序管理方法。
    
    **0. 挂起**
    
    当一个作业运行时间很长时,可以通过Ctrl+z把该作业挂起。这其实就是给终端发送了一个hangup信号。可以看到:```[1]+ Stopped ./command.sh```这就意味着该作业已经别挂起了,作业任务号是1.
    
    **1. 后台运行**
    
    输入命令```bg 1```,可以让任务号为1的作业在后台运行。屏幕上输出:```[1]+ ./command.sh &```说明任务号为1的作业已经在后台运行了。
    
    **2. 查看后台运行的作业**
    
    输入命令```jobs -l```,可以查看后台运行的作业,屏幕上输出:
    
    - **[1]+ Running ./command.sh &**,说明任务号为1的作业正在后台运行。
    - **[1]+ Stopped ./command.sh &**,说明任务号为1的作业已经在后台挂起。
    
    **3. 将后台运行的作业调往前台**
    
    输入命令```fg 1```,可以将任务号为1的后台作业调往前台运行。屏幕上输出:```./command.sh```说明该作业正在前台运行,且占据了终端。
    
    
    ## 1. 运行后台程序
    
    运行后台程序有两种方式,&符号和nohup命令:
    
    1. ```command &```: 后台运行command命令
    2. ```nohup command &```: 也是后台运行command命令。nohup是*no hangup*的意思,忽略*hangup*信号,也就是Shell窗口关闭和账户logout都不能终止command命令。
    
    ### 1.1 &符号
    Linux中运行程序时,终端会被作业占据,可以使用&符号把作业放在后台运行,例如:
    
    ```
    $ ./command.sh &
    [1] 3860
    ```
    
    输入命令```command.sh &```就把command程序放在后台运行了。终端会输出```[任务号] 进程号```,该作业的任务号为1,进程号为3860.
    
    **需要用户交互的作业怎么放到后台?**
    
    后台执行作业时有时需要用户交互,比如需要输出或者输入。如果按照上面的方式直接放到后台运行,作业会在后台一直等着,这样的话作业是执行不完,因为它在等着输出或者输入呢。**这种时候就需要重定向,将标准输出、标准错误和标准输入重定向到其他文件。**
    
    - ```command >/the/path/out.file &```,把command命令的标准输出重定向到了*/the/path/out.file*。
    - ```command >/the/path/out.file 2>&1 &```,把command命令的标准输出和标准错误重定向到了*/the/path/out.file*。
    - ```command /the/path/out.file 2>&1 &```,把command命令的标准输入重定向到了*/the/path/file.in*,同时把标准输出和标准错误重定向到了*/the/path/out.file*。
    - ```command <&- >/the/path/out.file 2>&1 &```,关闭了command命令的标准输入,同时把标准输出和标准错误重定向到了*/the/path/out.file*。
    
    
    ## nohup命令
    
    **使用&符号已经能够在后台执行作业,为什么需要在前面加上nohup命令呢?**
    
    &符号运行的后台作业会受到hangup信号的干扰,从而关闭该后台作业的进程。在Linux系统中,用户注销和网络断开,都会给终端发送hangup信号,通知其关闭所有子进程。**而nohup命令可以让后台作业忽略hangup信号。**
    
    输入命令```nohup conmmand &```,就可以让command在后台运行,且忽略hangup信号。那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。
    
    也可以自定义输出文件,例如```nohup command > myfile.out 2>&1 ```,标准输出和标准错误都被重定向到myfile.out。
    
  • 相关阅读:
    文本域光标操作(选、添、删、取)的jQuery扩展
    jQuery插件,将内容插入到光标处
    onmouseout,mouseover经过子元素也触发的问题解决方案
    【M4】非必要不提供default 构造方法
    【M3】绝对不要以多态方式处理数组
    100亿个数字找出最大的10个
    【M2】最好使用C++转型操作符
    【M26】限制某个class所能产生的对象数量
    理解extern
    变量的属性
  • 原文地址:https://www.cnblogs.com/hongyanee/p/3445370.html
Copyright © 2011-2022 走看看