1、kill( )
系统调用格式
int kill(pid,sig)
参数定义
int pid,sig;
其中,pid是一个或一组进程的标识符,参数sig是要发送的软中断信号。
(1)pid>0时,核心将信号发送给进程pid。
(2)pid=0时,核心将信号发送给与发送进程同组的所有进程。
(3)pid=-1时,核心将信号像广播般传送给系统内所有进程。
2、signal( )
预置对信号的处理方式,允许调用进程控制软中断信号。
系统调用格式
signal(sig,function)
头文件为
#include <signal.h>
参数定义
signal(sig,function)
int sig;
void (*function) ( )
函数说明:signal()会依参数sig指定的信号编号来设置该信号的处理函数。当指定信号到 达时就会跳转到参数function指定的函数执行。如果参数function不是函数指针,则必须是下列两个常数之一:
SIG_IGN 忽略参数sig指定的信号
SIG_DFL 将参数sig 指定的信号重设为核心预设的信号处理方式。
其中sig用于指定信号的类型,sig为0则表示没有收到任何信号,余者如下表:
值 | 名 字 | 说 明 |
01 | SIGHUP | 挂起(hangup)当终端机察觉到终止连线操作时便会传送这个信号 |
02 | SIGINT | 中断,当用户从键盘按^c键或^break键时,则会产生此信号 |
03 | SIGQUIT | 退出,当用户从键盘按quit键时,如CTRL+/,则会产生此信号 |
04 | SIGILL | 非法指令(进程执行了一个不合法德CPU指令) |
05 | SIGTRAP | 跟踪陷阱(trace trap),当子进程因被追踪而暂停时产生此信号给父进程 |
06 | SIGIOT | IOT指令 |
07 | SIGBUS | 总线错误,BUS发生错误时会产生此信号 |
08 | SIGFPE | 浮点运算溢出 |
09 | SIGKILL | 杀死、终止进程的信号,此信号不能被拦截或忽略 |
10 | SIGUSR1 | 用户自定义信号1 |
11 | SIGSEGV | 段违例(segmentation violation),进程试图去访问其虚地址空间以外的位置 |
12 | SIGUSR2 | 用户自定义信号2 |
13 | SIGPIPE | 错误的管道;欲写入无读取端的管道时产生此信号 |
14 | SIGALRM | 闹钟。当某进程希望在某时间后接收信号时发此信号 |
15 | SIGTERM | 软件终止(software termination) |
16 | SIGSTKFLT | 堆栈错误 |
17 | SIGHLD | 子进程暂停或结束时便会产生此信号给父进程 |
18 | SIGCONT | 此信号会让暂停的进程继续执行 |
19 | SIGSTOP | 此信号用来让进程暂停执行,此信号不能被拦截或忽略 |
20 | SIGTSTP | 当由键盘(CTRL+Z)表示暂停时就产生此信号 |
|
|
|
function:该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。
function 的解释如下:
(1)function=1时,进程对sig类信号不予理睬,亦即屏蔽了该类信号;
(2)function=0时,缺省值,进程在收到sig信号后应终止自己;
(3)function为非0,非1类整数时,function的值即作为信号处理程序的指针。
3、wait( )
等待子进程运行结束。如果子进程没有完成,父进程一直等待。wait( )将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。如果在wait( )前已有子进程暂停或终止,则调用进程做适当处理后便返回。
系统调用格式:
int wait(status)
int *status;
其中,status是用户空间的地址。它的低8位反应子进程状态,为0表示子进程正常结束,非0则表示出现了各种各样的问题;高8位则带回了exit( )的返回值。exit( )返回值由系统给出。核心对wait( )作以下处理:
(1)首先查找调用进程是否有子进程,若无,则返回出错码;
(2)若找到一处于“僵死状态”的子进程,则将子进程的执行时间加到父进程的执行时间上,并释放子进程的进程表项;
(3)若未找到处于“僵死状态”的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。
4、exit( )
终止进程的执行。
系统调用格式:
void exit(status)
int status;
其中,status是返回给父进程的一个整数,以备查考。为了及时回收进程所占用的资源并减少父进程的干预,UNIX/LINUX利用exit( )来实现进程的自我终止,通常父进程在创建子进程时,应在进程的末尾安排一条exit( ),使子进程自我终止。exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止。
如果调用进程在执行exit( )时,其父进程正在等待它的终止,则父进程可立即得到其返回的整数。核心须为exit( )完成以下操作:
(1)关闭软中断
(2)回收资源
(3)写记帐信息
(4)置进程为“僵死状态”
5、lockf( )
用作锁定文件的某些段或整个文件。
系统调用格式:
int lockf(feles,function,size)
int files,function;
long size;
其中,files是文件描述符;function是锁定和解锁,1表示锁定,0表示解锁;size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。