2014年7月30日星期三

Linux_071:进程

环境:RHEL 7.1 或 MAC 10.11.6

1. 前台进程
默认情况下,每一个进程都是前台运行的。
当然,你可以暂停前台进程,然后执行后台进程,并且在前后台进程之间自由切换。

2. 后台进程
开始一个后台进程的最简单的方法是在命令后面加一个 &。
比如:$ ls & 会输出
[1] 71974
这一行包含了两条后台进程信息:任务号和进程号。
在目录列表的末尾,不会得到任何提示符。这是因为提示符已经在"任务号和进程号"那一行之后出现过了。
如果此时按回车,会出现
[1]+  Done                    ls
这一行表明后台 ls 任务已经完成,然后下一行会出现提示符。

3. 切换前台进程至后台
当前台进程运行时,是不能执行其它命令的。
这时,可以使用 Ctrl + Z 暂停当前的进程。
如果 Ctrl + Z 不好使,可以使用 stty -a 看看你的系统设置。
被暂停的进程要想继续运行,可以有两种选择:前台运行或后台运行。
举例:$ dd if=/dev/zero of=/dev/null
按下 Ctrl + Z,输出如下:
^Z
[1]+  Stopped                 dd if=/dev/zero of=/dev/null
表明任务号为 1 的进程已经被停止,然后获得一个提示符。
如果想要在后台继续运行这个进程,需要输入 bg 命令,输出如下:
[1]+ dd if=/dev/zero of=/dev/null &
这样该进程就在后台运行,注意后面有个 & 符号。
如果有多个进程被暂停,可以用 jobs 命令查看任务列表,然后使用 bg %<任务号>,将该任务在后台运行。

4. 切换后台进程至前台
fg 命令可以把后台运行或暂停的进程切换至前台。
举例:$ dd if=/dev/zero of=/dev/null
按下 Ctrl + Z,输出如下:
^Z
[1]+  Stopped                 dd if=/dev/zero of=/dev/null
表明任务号为 1 的进程已经被停止,然后获得一个提示符。
如果想要在前台继续运行这个进程,需要输入 fg 命令,输出如下:
dd if=/dev/zero of=/dev/null
如果有多个进程被暂停,可以用 jobs 命令查看任务列表,然后使用 fg %<任务号>,将该任务在前台运行。

5. 保持后台进程(no hang up)
当退出系统后,默认是中止所有正在运行的进程,可以使用 nohup 命令防止这种情况在你需要保持的任务上发生。
举例:$ dd if=/dev/zero of=/dev/null
举例:$ dd if=/dev/zero of=/dev/null &

6. 等待后台进程的结束
(1)等待所有后台进程结束:wait
(2)等待指定后台进程结束:wait %<任务号>

7. 中止进程
kill %<任务号>
kill <PID>
kill -9 <PID>

8. 父进程和子进程

参考文献:
1. 《精通 shell 编程(第二版)》

没有评论: