一、程序、进程、作业
(一)程序
程序是一组指令及数据的集合,指令按照既定的逻辑控制计算机运行来完成特定任务。
程序是静态的,运行后成为进程。
(二)进程
进程是运行着的程序,是操作系统执行的基本单位,是程序运行的过程,是动态的,有生命周期和运行状态。
1.进程的状态
进程状态包括以下五种:
(1)TASK_RUNNING(运行态):进程正在执行,或者在运行队列中等待执行。
(2)TASK_INTERRUPTIBLE(可中断睡眠态):进程被阻塞,等待某些条件的完成。一旦完成这些条件,内核就会将该进程的状态设置为运行态。
(3)TASK_UNINTERRUPTIBLE(不可中断睡眠态):进程被阻塞,等待某些条件的完成。与可中断睡眠态不同的是,该状态进程不可被信号唤醒。
(4)TASK_ZOMBIE(僵死态):该进程已经结束,但是其父进程还没有将其回收。
(5)TASK_STOP(终止态):进程停止执行。通常进程在收到SIGSTOP、SIGTTIN、SIGTTOU等信号的时候会进入该状态。
(三)作业
就是用户提交给系统的一个任务。
若干进程共同完成一个作业。作业可以包含一个或多个进程。
jobs的状态可以是running, stopped, Terminated。
(四)进程与作业的区别与联系
1.联系
一个作业通常包括几个进程,几个进程共同完成一个任务,即作业。
用户提交作业以后,当作业被调度,系统会为作业创建进程,一个进程无法完成时,系统会为这个进程创建子进程。
2.区别
进程是一个程序在一个数据集上的一次执行,而作业是用户提交给系统的一个任务。
作业有作业id,叫jobid
进程有进程id,叫pid
使用作业id时,必须在前面加%
使用进程id时,直接使用数字,不需要加%
二、信号signal
linux是通过一个信号(signal)去告知进程要做什么。主要信号代号与名称含义如下:
代号 | 名称 | 含义 |
---|---|---|
1 | SIGHUP | 启动被终止的进程,可让该pid重新读取自己的配置文件,类似重新启动 |
2 | SIGINT | 相当于用键盘输入 ctrl-c 来终端一个进程的运行 |
9 | SIGKILL | 强制终止一个进程的运行,如果该进程进行到一半,那么尚未完成的部分可能会有半成品产生,类似 vim 会有 .filename.swp 保留下来 |
15 | SIGTERM | 正常终止该进程。由于是正常的终止,所以后续的动作会完成。不过,如果该进程已经发生问题,就无法使用正常的方法终止时,输入该 signal 也是没有用的 |
19 | SIGSTOP | 相当于用键盘输入 ctrl-z 来暂停一个进行的进程 |
三、查看所有进程或作业
(一)使用ps命令,查看所有进程,可以查看pid
(二)使用jobs命令,查看所有作业,可以查看jobid,job状态
jobs -l选项可显示作业对应进程的pid。
概念:当前作业
如果后台的作业号有2个,分别是[1],[2];当[1]作业执行完毕,[2]作业还在执行中,当前作业便会自动变成[2]作业。所以可以得出一点,即当前作业是会变动的;当用户输入fg、bg命令时,如果不加任何序号,则默认均是当前作业。
四、前台与后台
进程或作业可分为前台运行与后台运行。
(一)前台:是在终端中运行的命令,那么该终端就是进程的控制终端,一旦这个终端关闭,这个进程也随之消失。
(二)后台:是运行在后台的进程,不受终端控制,它不需要终端的交互。
键入命令后,在最后加一个&,将进程放在后台运行。
五、前后台切换
1.将前台切换到后台
先使用Ctrl+z把作业暂停,然后用 bg %jobid命令把它放到后台运行
2.将后台切换到前台
fg %jobid(或者简单的用%jobid)将后台中的命令调至前台继续运行。
六、暂停
(一)后台进程或作业的挂起
kill -19 pid将进程挂起;
kill -19 %jobid,将作业挂起;
(二)前台进程或作业的挂起
ctrl+z
八、恢复
当要恢复被挂起任务时,通过bg %jobid 使其在后台执行;
当要使其在前台执行时,通过fg %jobid即可;
九、终止
(一)使用kill %jobid,终止作业。%%代表最近的作业,%-代表次最近的作业
(二)使用kill pid,终止进程
(三)前台进程或作业的终止:使用ctrl+c
十、nohup
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
以下命令在后台执行 root 目录下的 runoob.sh 脚本:
nohup /root/runoob.sh &