Linux/Unix 提供了不同与 windows 的多任务处理,也提供一套用来切换前后台任务的命令

bg fg & Ctrl+z nohup sitsid
  1. Ctrl-Z  挂起程序

    user@ae01:~$ ./test.sh
    ^Z
    []+ Stopped ./test.sh
    user@ae01:~$

    当作业在运行期间,执行 Ctrl-Z 暂挂起该作业并返回该作业的 JobID 等信息,类似于使用 jobs 命令返回的信息

  2. bg  后台执行
    user@ae01:~$ jobs
    []+ Stopped ./test.sh、
    user@ae01:~$ bg
    [1]+ ./test.sh &
    user@ae01:~$

    bg 将暂挂的作业作为后台作业运行来在当前环境中重新执行这些作业,如果指定的作业已经在后台运行,bg 命令不起作用并成功退出。如果未提供 JobID 参数,bg 命令会使用最近暂挂的作业

  3. fg  前台运行作业
    user@ae01:~$ jobs
    []+ Stopped ./test.sh、
    user@ae01:~$ fg
    ./test.sh
    user@ae01:~$

    fg 使用 JobID 参数来指明在前台下要运行的特定作业。如果提供 JobID,fg 命令使用最近在后台被暂挂的作业

  4. &  把作业放到后台执行
    user@ae01:~$ ./test.sh &
    []
    user@ae01:~$

    当在前台运行某个作业时,终端被该作业占据;可以使用&命令把作业放到后台执行,而在后台运行作业时,它不会占据终端。实际上,这样是将命令放入到一个作业队列中了。作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:command >out.file 2>&1 &

  5. nohup  忽略挂断信号
    user@ae01:~$ nohup ./test.sh > test.log >& &
    []
    user@ae01:~$ jobs

    在执行作业时,可以使用小括号() 执行后台作业也能做到类似 nuhup 的效果,使得 当前 Shell 关闭后,作业仍能正常运行。原理同 setsid 和 disown

    user@ae01:~$ (./test.sh &)
    
    user@ae01:~$ ps -ef | grep test
    : ? :: /bin/sh ./test.sh
    : pts/ :: grep test

    使用 & | bg 运行后台命令时,其父进程还是当前终端 shell 的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者使用setsid将父进程设为init进程(进程号为1),也可以使用 disown 命令

    1. setsid

      user@ae01:~$ ps -ef | grep test
      : pts/ :: /bin/sh ./test.sh
      : pts/ :: grep test
      user@ae01:~$ setsid ./test.sh &
      []
      user@ae01:~$ ps -ef | grep test
      : ? :: /bin/sh ./test.sh
      : pts/ :: grep test

      对于已经执行的前台作业,setsid 可以将当前作业的父进程设置为1,但对于已经是后台运行的命令我们需要使用 disown 命令

    2. disown
      user@ae01:~$ ./test.sh &
      []
      user@ae01:~$ jobs -l
      []+ Running ./test.sh &
      user@ae01:~$ disown -h %
      user@ae01:~$ ps -ef | grep test
      : ? :: /bin/sh ./test.sh
      : pts/ :: grep test

      对于已经执行的后台作业,disown 可以将当前作业的父进程设置为1

Linux 任务控制的更多相关文章

  1. linux 终端控制-- 多彩输出 格式排版

    linux 终端控制-- 多彩输出 格式排版 在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用. 先来 ...

  2. (转)linux下控制帐户过期的多种方法

    linux下控制帐户过期的方法:原文:http://blog.51cto.com/oldboy/1289144企业里一般给无人管理的角色账户或开发人员临时需求等可以设定账户有效期,提升安全!法一:添加 ...

  3. 资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。

    ###### https://learn-linux.readthedocs.io/zh_CN/latest/administration/kernel/rlimit.html ########### ...

  4. Linux资源控制-CPU和内存

    主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进程能够占用CPU多长时间, 什么时候能够占用CPU是和系统的调度密切相关的. Linux系统中有多 ...

  5. linux pam 控制模式

    工作类别(type).流程栈(stack)和控制模式(control) Linux-PAM 工作的"类别"(type) PAM 的具体工作主要有以下四种类别(type):accou ...

  6. Linux资源控制-CPU和内存【转】

    转自:http://www.cnblogs.com/wang_yb/p/3942208.html 主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进 ...

  7. Linux进程控制(三)

    1. 进程间打开文件的继承 1.1. 用fork继承打开的文件 fork以后的子进程自动继承了父进程的打开的文件,继承以后,父进程关闭打开的文件不会对子进程造成影响. 示例: #include < ...

  8. Linux进程控制(二)

    1. 进程的创建 Linux下有四类创建子进程的函数:system(),fork(),exec*(),popen() 1.1. system函数 原型: #include <stdlib.h&g ...

  9. Linux进程控制(一)

    1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别.程序是静态的,它是一些保存在磁盘上的指令的有序集合:而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建.调度 ...

  10. Linux进程控制——exec函数族

    原文:http://www.cnblogs.com/hnrainll/archive/2011/07/23/2114854.html 1.简介 在Linux中,并不存在exec()函数,exec指的是 ...

随机推荐

  1. Beanutils基本用法

    Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的.无论谁的项目,始终一天都会用得上它.我算是后知后觉了,第一回看到它的时候居然错过. 1.属性的动态gett ...

  2. Unity3D 搭建优雅的UI框架

    为什么要使用UI框架?直接使用NGUI或UGUI一拖一拉直接搭载出界面不就行了? 我相信很多小白,包括我在刚学习Unity3D UI的时候都这样想过. 我的第一款款Unity2D游戏<山地赛车& ...

  3. 清北学堂模拟赛day7 错排问题

    /* 考虑一下已经放回m本书的情况,已经有书的格子不要管他,考虑没有书的格子,不考虑错排有(n-m)!种,在逐步考虑有放回原来位置的情况,已经放出去和已经被占好的格子,不用考虑,剩下全都考虑,设t=x ...

  4. jsp动作元素之forward指令

    forward指令用于将页面响应转发到另外的页面.既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet. forward指令格式如下: <jsp:for ...

  5. MySQL show processlist命令详解

    show processlist; 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令. 方式1:进入mysql/bin目录下输入mysqladmin proc ...

  6. phpcms手机门户相关

    相关标签 {$WAP['sitename']}标题 {list_url(3)} 调取栏目链接 {template "wap","header"}{templat ...

  7. WindowsForm公共控件--2016年12月5日

    Button text:修改按钮显示的文字 CheckBox Checked:是否选中 CheckedListBox checkedListBox.Items.Add(显示的值,初始选中状态); ch ...

  8. BZOJ 4724: [POI2017]Podzielno

    Description 由\([0,B-1]\)的数字构造一个 \(B\) 进制数字,使得他是 \(B-1\) 的倍数. Sol 贪心+二分. 首先 \(X\) 是 \(B-1\) 的倍数,那么有 \ ...

  9. socket的IO多路复用

    IO 多路复用 I/O多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. Linux Linux中的 select,poll, ...

  10. dex文件格式一

    一.生成dex文件 我们可以通过java文件来生成一个简单的dex文件 编译过程: 首先编写java代码如下: (1) 编译成 java class 文件 执行命令 : javac Hello.jav ...