进程,就是程序的一次执行过程。
由一个进程创建的另一个进程,前者叫父进程,后者是前者的子进程。
会产生子进程的几种情况:
我们先通过一个例子来说明进程和子进程:
[peter@ibi98 process]$ cat subshell.sh #!/bin/bash echo $$ #当前进程的进程号,也就是该脚本执行时的进程号 echo $PPID #当前进程的父进程的进程号,也就是执行该脚本的shell的进程号 [peter@ibi98 process]$ echo $$ #显示当前shell的进程号 19828 [peter@ibi98 process]$ sh subshell.sh #程序中的PPID就是当前shell的进程号 22194 19828
上面的例子中,程序subshell.sh输出执行时自身的进程号和其父进程号,从结果可以看出,其父进程就是在其中执行该程序的shell。
父进程创建子进程时,子进程会继承父进程的环境变量。但父进程新定义的变量,子进程无法使用,只有当父进程将该变量导出(export)成环境变量时,子进程才可以使用。如:
[peter@ibi98 process]$ echo $color #当前shell中变量color还没赋值 [peter@ibi98 process]$ cat subshell.sh #!/bin/bash echo $color [peter@ibi98 process]$ sh subshell.sh #子进程中的color也没有值 [peter@ibi98 process]$ color=red #当前shell中给变量color赋值 [peter@ibi98 process]$ echo $color #当前shell中color有值了 red [peter@ibi98 process]$ sh subshell.sh #子程序中的color仍然是空的 [peter@ibi98 process]$ export color #导出变量color成环境变量 [peter@ibi98 process]$ sh subshell.sh #子程序中的color也有值了 red
如下图所示,父进程新定义的变量是私有变量,用export导出成环境变量后,子进程才可以使用。
与作业控制相关的命令有:
Ctrl + z 暂停正在运行的命令 fg 将后台程序放到前台 bg 将暂停的程序放到后台继续执行 & 放在命令尾部,后台执行 jobs 查看当前在后台运行的命令 kill 终止进程
这些命令在前面的Linux常用命令一章相关小节中已经学过,可以到相应的小节中查询。