FreeBSD是一个多任务的操作系统,也就是说同时可以执行多个程序。一个执行中的程序就是进程。
每个进程都有一个由系统临时分配的唯一标识,称为进程ID(可从1分配到99999),或PID。绝大多数的进程都有一个父进程,即用来启动该进程的进程。但是,在系统中有一个叫做init的进程,其PID始终为1,该进程在FreeBSD启动时由内核自动启动。
例如,用户在shell中执行指令ls,则ls对应的进程就是shell的子进程,shell是ls的父进程。
在
FreeBSD中,可以使用ps和top两个指令来察看当前系统中进程的状态。其中,ps会显示当前运行的拥有控制终端的进程的状态,包括PID、运行其
的终端、状态、占用的CPU时间和启动其的命令等。ps常用的参数包括:a显示所有运行的进程,u显示进程所属的用户和占用的内存,x显示出后台进
程,ww显示完整的命令行。
附:在进程中,有一部分是有终端的,需要和用户进行交互来完成其功能。而另一部分是不需要和用户进行交互的,称为守护进程deamon(通常在名称后加上d表示)。
而
top则显示所有的运行进程,包括PID、运行该进程的用户、运行的线程数、优先级、最大内存需求、当前占用内存、进程状态、占用CPU时间和百分比,以
及运行该进程的命令等。并且,该进程会默认每2秒刷新一次状态,该参数可以用选项s修改。而在该命令的开始部分,则显示当前总进程数、进程状态统计、
CPU状态、内存信息和交换分区的信息等。
在进程间进行通讯可以采用信号的机制。不同的信号根据不同的数字编号有着不同的含义,其中一些有特殊含义,另一些则可被应用程序进行解释。通常,用户只能给自己拥有的进程发送信息,而给其他人发送的信息则可能被kill拒绝。但root可以将各种信号发送给每个进程。
在某些情况下,FreeBSD可以向应用程序发送信号,例如段式违规信号(SIGSEGV)和闹钟信号(SIGALRM)等。可用来终结进程的信号有SIGTERM和SIGKILL,前者可以被进程自行决定是否终结,而接收到后者的进程则必须立刻被终结。
在FreeBSD中可以使用/bin/kill指令来发送信号,其语法是:
kill -s 信号 PID
其中常用的信号包括HUP、INT、QUIT、ABRT、KILL、ALRM、TERM等。
再
来看看shell。shell就是命令行界面,其主要功能是从输入取得命令然后去执行之。FreeBSD内含了若干shell,如sh、tcsh等,可以
自行选择使用何种shell(默认为csh)。shell的一大特点是能够自动补齐文件名(输入命令或文件名前几个字母后按tab键即可,若不能自动不全
则发出响铃)。
shell的另一特点是利用环境变量运行,主要包括USER(当前用户名)、PATH(默认路径名)、
DISPLAY(X11显示器的网络名称)、SHELL(当前使用的shell名)、TERM(用户终端的名字)、TERMCAP(各种终端功能所用终端
分离编码的基本数据项目)、OSTYPE(操作系统类型)、MACHTYPE(CPU体系结构)、EDITOR(首选的文本编辑器)、PAGER(首选的
文本页面调度程序)和MANPATH(联机手册路径)等。在csh下设置变量的指令为:
setenv 变量名 值
显示环境变量值的指令为:
echo $变量名
参考资料:The FreeBSD Documentation Project