- 1、本文档共124页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信号通信 信号(signal)机制用于在一个或多个进程之间传递异步信号。 信号的实质是软件中断。 很多条件可以产生一个信号. 内核为进程生产信号,来响应不同的事件,这些事件就是信号源。主要信号源如下: (1)异常:进程运行过程中出现异常; (2)其它进程:一个进程可以向另一个或一组进程发送信号; (3)终端中断:Ctrl-c,Ctro-\等; (4)作业控制:前台、后台进程的管理; (5)分配额:CPU超时或文件大小突破限制; (6)通知:通知进程某事件发生,如I/O就绪等; (7)报警:计时器到期 Shell下使用“kill -l”命令可以列出该系统中所支持的所有信号列表Linux中的信号。 信号通信 常用信号含义: SIGHUP:从终端上发出的结束信号; SIGINT:来自键盘的中断信号(Ctrl+c) SIGQUIT:来自键盘的退出信号; SIGFPE:浮点异常信号(例如浮点运算溢出); SIGKILL:该信号结束接收信号的进程; SIGALRM:进程的定时器到期时,发送该信号; SIGTERM:kill命令生出的信号; SIGCHLD:标识子进程停止或结束的信号; SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止扫行信号 信号通信 可以要求系统在某个信号出现时按照下列三种方式中的一种进行操作: (1)忽略此信号:大多数信号都可使用这种方式进行处理,但有两种信号却决不能被忽略。它们是:SIGKILL和SIGSTOP。 (2)捕捉信号:此信号的捕捉函数可以调用waitpid以取得该子进程的进程ID以及它的终止状态。 (3)执行系统默认动作,5种: ①异常终止(abort):在进程的当前目录下,把进程的地址空间内容、寄存器内容保存到一个叫做core的文件中,而后终止进程。 ②退出(exit):不产生core文件,直接终止进程。 ③忽略(ignore):忽略该信号。 ④停止(stop):挂起该进程。 ⑤继续(contiune):如果进程被挂起,则恢复进程的执行。否则忽略信号。 对大多数信号的系统默认动作是终止该进程。 信号通信 信号的发送与捕捉 发送与捕捉相关的函数主要有kill()、raise()、alarm()和pause(). (1)kill和raise函数 系统命令kill 只是kill函数的一个用户接口。而实际的kill()函数不仅可以中止进程,也可以向进程发送其他信号。与kill函数不同的是,raise()函数运行向进程自身发送信号。函数的基本语法: 所需头文件:#includesys/types.h #includesignal.h 函数原型:int kill(pid_t pid,int signo); int raise(int signo); 两个函数返回值含义一致:若成功则为0,若出错则为-1。 函数的输入参数:signo为发送的信号。kill的另一个参数pid有三种情况: ①pid0将信号发送给进程ID为pid的进程。 ②pid==0将信号发送给所有和pid进程在同一个进程组得进程。 ③pid==-1 将信号发给所有的进程表中的进程,进程号最大的进程除外。 信号通信 (2)alarm和pause函数 使用alarm函数可以设置一个时间值(闹钟时间),在将来的某个时刻时间值会被超过。当所设置的时间被超过后,产生SIGALRM信号,SIGALRM信号默认动作是终止该进程。与之对应,pause函数是使调用进程挂起直至捕捉到一个信号,这个信号通常用来判断信号是否已到时。 alarm函数的基本语法: 所需头文件:#includeunistd.h 函数原型:unsigned int alarm(unsigned int seconds); 函数的传入参数seconds的值是秒数,经过了指定的seconds秒后产生信号SIGALRM。 函数返回值:0或以前设置的闹钟时间的余留秒数。 信号通信 pause函数的基本语法: 所需头文件:#includeunistd.h 函数原型:int pause(void); 函数返回值:-1,并将errno设置为EINTR。 只有执行了一信号处理程序并从其返回时,pause才返回。 函数使用实例:alarm_pause.c 2.3 Linux Shell编程 预定义变量是在执行外壳程序时系统就设置好了,并且你不能加以修改的变量: $# 存储外壳程序中命令行参数的个数。 $? 存储上一个执行命令的返回值。 $0 存储外壳程序的程序名。 $* 存储外壳程序的所有参数。 $@ 存储所有命令行输入的参数,分别表示为(“$1”“$2”. . . )。 将前面的reverse修改成recerse2:
您可能关注的文档
- 工业设计概论基本第六章.ppt
- 工业设计概论基本第七章.ppt
- 工业设计概论基本第三章.ppt
- 工业设计概论基本第十章.ppt
- 工业设计概论基本第四章.ppt
- 工业设计概论基本第五章.ppt
- 工业设计机械基础第七章、第八章.ppt
- 工业设计机械基础第三章、第四章.ppt
- 工业设计机械基础第五章、第六章.ppt
- 工业设计机械基础第一章、第二章.ppt
- 某某单位2024年党建工作总结及2025年工作计划.doc
- 某某市发改委关于2024年度落实党风廉政建设工作责任制情况的报告.doc
- 某某局2024年全面从严治党和党风廉政建设工作总结.doc
- 某某区财政局2024年法治政府建设总结及2025年工作谋划.doc
- 2024年党管武装工作述职报告2篇.doc
- 2024年度国企党委书记抓基层党建工作述职报告3篇.doc
- 公司党委书记2024年述职述廉报告.docx
- 2024年度乡镇党委领导班子民主生活会(四个带头)对照检查材料.doc
- 市医疗保障局关于2024年法治政府建设工作情况的报告.docx
- 市民政局党组2024年巡察整改工作情况报告.docx
文档评论(0)