kill
k i l l函数将信号发送给进程或进程组。
int kill(pid_t p i d, int s i g n o) ;
k i l l的p i d参数有四种不同的情况:
- p i d > 0 将信号发送给进程I D为p i d的进程。
- p i d == 0 将信号发送给其进程组I D等于发送进程的进程组I D,而且发送进程有许可权向其发送信号的所有进程。 这里用的术语“所有进程”不包括实现定义的系统进程集。对于大多数 U N I X系统,系统进程集包括: 交换进程(pid 0),init
(pid 1)以及页精灵进程(pid 2)。- pid < 0 将信号发送给其进程组I D等于p i d绝对值,而且发送进程有许可权向其发送信号的所有进程。如上所述一样,“所有进程”并不包括系统进程集中的进程
- pid == -1 POSIX.1未定义此种情况。
P O S I X . 1将信号编号0定义为空信号。如果s i g n o参数是0,则k i l l仍执行正常的错误检查,但不发送信号。这常被用来确定一个特定进程是否仍旧存在。如果向一个并不存在的进程发送空信号,则k i l l返回-1,e r r n o则被设置为E S R C H。
raise
r a i s e函数则允许进程向自身发送信号。
int raise(int s i g n o) ; 两个函数返回:
若成功则为0,若出错则为- 1
alarm
使用a l a r m函数可以设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。当所设置的时间值被超过后,产生 S I G A L R M信号。如果不忽略或不捕捉此信号,则其默认动作是终止该进程。
unsigned int alarm(unsigned int s e c o n d s) ;
返回:0或以前设置的闹钟时间的余留秒数
要了解的是,经过了指定秒后,信号由内核产生,由于进程调度的延迟,进程得到控制能够处理该信号还需一段时间。每个进程只能有一个闹钟时间。如果在调用 a l a r m时,以前已为该进程设置过闹钟时间,而且它还没有超时,则该闹钟时间的余留值作为本次 a l a r m函数调用的值返回。以前登记的闹钟时间则被新值代换。如果有以前登记的尚未超过的闹钟时间,而且 s e c o n d s值是0,则取消以前的闹钟时间,其余留值仍作为函数的返回值。虽然S I G A L R M的默认动作是终止进程,但是大多数使用闹钟的进程捕捉此信号。如果此时进程要终止,则在终止之前它可以执行所需的清除操作
pause
p a u s e函数使调用进程挂起直至捕捉到一个信号。只有执行了一个信号处理程序并从其返回时, p a u s e才返回。在这种情况下, p a u s e返回- 1,e r r n o设置为E I N T R。
int pause(void);
返回:- 1,e r r n o设置为E I N T R