进程软中断通信.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程软中断通信 1.kill() 进程用kill()向一个进程或一组进程发送一个信号。系统调用pid,sig)。其pid是一个或一组进程的标识符,sig是要发送的软中断信号。信号的发送分如下三种情况。 pid0时,核心 pid=0时,核心将信号发送给与发送进程同组的所用进程。 pid=-1时,核心将信号发送给 2.signal(sig,function) 接收信号的程序用signal()来实现对处理方式的预置,允许调用系统调用 function),此时需包含头文件其中sig用于指定信号的类型,sig为0则表示没有收到任何信号,其余 调用函数使用如下头文件: #includesignal.h 参数定义如下: signal (sig,function) int sig; void(*func) (); function是该进程中的一个函数地址,在核心它以对除了核心自动进程 function的解释如下: (1)function=1时,进程 (2)function=0时,默认值,进程 (3)function为非0、非1类整数时,执行用户设置的软中断处理程序。 信号的类型 值 名字 说明 01 SIGHUP 挂起(hangup) SIGINT 中断,当用户^c”键或“^break”键时 03 SIGQUIT 退出,当用quit“键时 04 SIGILL 非法指令 05 SIGTRAP 跟踪陷阱(trace trap) SIGIOT IOT指令 07 SIGEMT EMT指令 08 SIGFPE 浮点运算溢出 09 SIGKILL 终止进程 10 SIGBUS 总线错误 11 SIGSEGV 段违例,进程试图去访问其虚地址 12 SIGSYS 系统调用中参数错,如系统调用号非法 13 SIGPIPE 向某个非读管道中写入数据 14 SIGALRM 闹钟。当进程希望 15 SIGTERM 软件终止(software termination) SIGUSR1 用户自定义信号1 17 SIGUSR2 用户自定义信号2 18 SIGCLD 某个子进程死 19 SIGPWR 电源故障 编程实现例一 【任务】 编程实现,父进程生成子进程,父进程发送信号并等待子进程接收信号并完成某种功能,然后自我终止并唤醒父进程。 #include stdio.h #include signal.h #include unistd.h int func(); main() { int i,j; signal(17,func); if(i=fork()) { printf(“Parent: Signal 17 will be send t to Child! \n ”) kill(i,17); wait(0); printf (“Parent: finished! \n”); } else { sleep(10); printf(“Child: A signal from my Parent is received ! \n”); exit(); } } func() { printf(“It is signal 17 processing function ! \n”) } 【运行结果】 【分析】 编程实现例二 【任务】 编制一程,父进程父进程。Parent process is killed! 【程序】 #include stdio.h #include signal.h #include unistd.h int waiting(),stop(); int wait_mark; main() { int p1,p2; while ((p1=fork())==-1); if (p10) { while ((p2=fork())==-1); if (p20) { printf(“parent\n”); wait_mark=1; signal(SIGINT,stop); /*接收DEL信号,并转stop()*/ waiting(); kill(p1,16); /*向P1发中断信号16*/ kill(p2,17); /*向P2发中断信号17*/ wait(0); wait(0); printf(“parent process is killed!\n”); exit(0) } else { printf(“p2\n”); wait_mark=1; signal(1

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档