2022年操作系统实验 10.pdf
《2022年操作系统实验 10.pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验 10.pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、进程的同步使用系统调用kill() 和 signal()实现:通过父进程向子进程发软中断信号,子进程接收信号的方式实现子进程对父进程的等待。系统调用kill( ) 功能描述:用于向任何进程组或进程发送信号。用法:#include #include int kill(pid_t pid, int sig); 参数:pid:可能选择有以下四种1. pid 大于零时, pid 是信号欲送往的进程的标识。2. pid 等于零时,信号将送往所有与调用kill() 的那个进程属同一个使用组的进程。3. pid 等于 -1 时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init) 。4. p
2、id 小于 -1 时,信号将送往以-pid 为组标识的进程。sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig 值为零来检验某个进程是否仍在执行。返回说明:成功执行时,返回0。失败返回 -1,errno 被设为以下的某个值EINVAL :指定的信号码无效EPERM;没有给任何目标进程发送信号的权限ESRCH:目标进程或进程组不存在系统调用signal() 通过 Linux 提供的系统调用signal()来执行一个预先安排好的信号处理函数。signal()调用的原型是#include #include void (* signal(int sig
3、num, void(*handler)(int)(int); signal()的返回值是指向一个函数的指针,该函数的参数为一个整数,无返回值。1、利用 kill() 和 signal()实现父子进程的同步。要求如下: 父进程创建一个子进程,在父进程中显示三行how are you! ,然后发软中断信号给子进程,再等待子进程终止后输出结束信息ok! ,然后终止执行。子进程中循环显示I am a child! ,当接收到父进程发来的软信号后停止循环,显示child exit! 并终止执行。分析: 他们之间的同步关系是:子进程在循环显示中等待父进程发出的软中断信号,并输出结束信息,然后结束;父进程等
4、待子进程结束后输出结束信息,然后结束。/*tongbu1.c*/ #include #include #include int k; void stop(int sig) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - k=0; main() int k1, p1; while(p1=fork()=-1); if(p10) for(k1=1;k1=3;k1+) printf(how are you!n); sleep(1); k
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验 10 2022 操作系统 实验
限制150内