加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:进程管理和通信

发布时间:2016-09-27 18:52:05 所属栏目:Unix 来源:站长网
导读:副标题#e# 进程和程序的区别: 进程: 程序的一次执行过程 动态过程,进程的状态属性会发生变化 程序:存放在磁盘上的指令、数据的有序集合 是个文件,可直观看到 程序program 静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu! 但前提是cpu

常用信号

信号名:含义(默认操作)

SIGHUP:该信号在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,通知同一会话内的各个作业与控制终端不再关联。(终止)

SIGINT:该信号在用户键入INTR字符(通常是Ctrl-C)时发出,终端驱动程序发送此信号并送到前台进程中的每一个进程。(终止)

SIGQUIT:该信号和SIGINT类似,但由QUIT字符(通常是Ctrl-)来控制。(终止)

SIGILL:该信号在一个进程企图执行一条非法指令时(可执行文件本身出现错误,或者试图执行数据段、堆栈溢出时)发出。(终止)

SIGFPE:该信号在发生致命的算术运算错误时发出。这里不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误。(终止)

SIGKILL:该信号用来立即结束程序的运行,并且不能被阻塞、处理和忽略。(终止)

SIGALRM: 该信号当一个定时器到时的时候发出。(终止)

SIGSTOP:该信号用于暂停一个进程,且不能被阻塞、处理或忽略。(暂停进程)

SIGTSTP:该信号用于暂停交互进程,用户可键入SUSP字符(通常是Ctrl-Z)发出这个信号。(暂停进程)

SIGCHLD :子进程改变状态时,父进程会收到这个信号。(忽略)

SIGABORT :该信号用于结束进程。(终止)

SIGUSR1(10) SIGUSR2(12) 保留给用户使用。

SIGKILL及SIGSTOP不能忽略、不能捕捉。

kill –l 命令查看系统支持的信号列表

信号相关的函数

网络的服务器模型里信号捕捉里将进程回收 waitpid(-1, NULL, WNOHANG);

发送信号

#include <signal.h>

#include <sys/types.h>

int kill(

pid_t pid,

int sig

);

int raise(

int sig

);

参数:

pid:

正数:要接收信号的进程的进程号

0:信号被发送到所有和pid进程在同一个进程组的进程

-1:信号发给所有的进程表中的进程(除了进程号最大的进程外)

sig:信号

返回值

成功:0

出错:-1

kill和raise的区别

可以发送信号给进程或进程组(实际上,kill系统命令只是kill函数的一个用户接口)。

raise函数允许进程向自己发送信号。

#include <unistd.h>

unsigned int alarm(

unsigned int seconds  //指定秒数

);

返回值

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

成功:如果调用此alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。

出错:-1

函数说明:

它在进程中设置一个定时器。当定时器指定的时间到时,内核就向进程发送SIGALARM信号,取消闹钟alarm(0);

int pause(void)

返回值

-1,并且把error值设为EINTR。

函数说明:

pause()

让进程睡眠,将当前进程处于等待态(可中断)直到有信号。

信号的处理

一个进程可以设定对信号的相应方式,

信号处理的主要方法有两种。

使用简单的signal()函数

使用信号集函数组

信号绑定函数:

#include <signal.h>

void (

*signal(

int signum,

void (*handler)(int))

)(int);

等价于:

typedef void (fun)(int);

fun * signal(signum, fun * handler)

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读