一、实验目的及要求 |
|
二、实验工具 |
PC机、Vmware station虚拟机软件、Ubuntu 16操作系统 |
三、实验内容及步骤 |
<任务一>: 编程实现,父进程生成子进程,父进程发送信号并等待,子进程接收信号并完成某种功能,然后自我终止并唤醒父进程。 任务一程序: 编译并且运行: 任务一结果: 任务一分析: 这是一个使用信号机制实现进程间通信的程序。其中,主进程先设置了中断信号17的信号处理函数为func(),然后调用fork()函数创建了子进程,并向子进程发送了中断信号17。 在子进程中,首先调用sleep()函数使其挂起10秒钟,等待接收来自父进程的信号。当子进程接收到中断信号17时,会触发func()函数,输出相应的提示信息并退出。 在主进程中,首先输出相应的提示信息,然后调用wait()函数等待子进程结束。当子进程结束后,主进程会输出“Parent: finished!”的提示信息,并正常退出。 总的来说,这是一个简单的进程间通信程序,通过信号机制实现了父子进程之间的消息交互。同时,通过信号处理函数,可以对不同类型的信号进行不同的处理操作,实现更加灵活和精细的控制。 <任务二>: 编写进程,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即DEL键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止。 child process 1 is killed by parent! child process 2 is killed by parent! 父进程等待两个子进程终止后,输出以下信息后终止。 Parent process is killed! 程序: 编译并且运行: 运行结果: 按下ctrl+c中断进程时,程序才执行,父进程打印消息,父进程kill子进程,子进程1收到消息上锁,然后解锁关闭进程,随后子进程2同样操作,然后父进程打印,最后中断进程。 任务二分析: 这是一个使用信号机制实现进程通信和控制的程序。其中,主进程通过调用fork()函数创建了两个子进程p1和p2,然后向p1和p2分别发送了中断信号16和17,以杀死它们。 在程序中,通过wait_mark变量的值来控制各个进程的运行状态,同时使用signal()函数设置信号处理函数。当主进程接收到DEL信号时,会调用stop()函数,将wait_mark的值设为0,从而让各个子进程退出等待状态并终止运行。 在子进程中,首先设置了各自的信号处理函数和等待状态。当接收到相应的中断信号时,子进程会被杀死,同时输出相应的提示信息,并使用lockf()函数对标准输出进行加锁操作,以避免输出混乱。 总的来说,这是一个比较简单的进程通信和控制程序,通过信号机制控制各个进程的运行流程,实现了多进程之间的协同工作。 任务二问题:
答:wait(0暂时停止目前进程的执行,直到信号来到或子进程结束,如果在调用wait(0)时子进程已经结束,则wait(0)会立即返回子进程结束状态值。
答:因为在强调处强行退出程序,运行一次程序就结束。 <任务三>: 在上面程序中,增加语句signal(SIGINT,SIG_IGN)、signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。 程序: 编译并且运行: 运行结果: 任务三分析: 这是一个使用信号机制实现进程间通信和控制的程序。主进程通过调用fork()函数创建了两个子进程p1和p2,并向它们分别发送用户自定义信号SIGUSER1和SIGUSER2,以触发相应的信号处理函数int1()和int2(),输出相应的提示信息并退出进程。 在主进程中,首先设置了DEL信号的信号处理函数为intdelete(),并使用waitpid()函数等待子进程的结束信号,从而使主进程最后退出。 在子进程中,分别设置了SIGUSER1和SIGUSER2的信号处理函数,并使用pause()函数将子进程挂起,等待父进程发送相应的信号。当子进程接收到相应的信号时,会触发相应的信号处理函数,并输出相应的提示信息和退出。 同时,在子进程中,还使用signal()函数对SIGINT和SIGQUIT信号进行忽略操作,避免意外终止进程的出现。 总的来说,这是一个比较完整、细致的、使用信号机制实现进程通信和控制的程序。通过信号处理函数和信号控制语句,实现了多进程之间的协同工作。 |
四、实验总结 |
进程软中断通信是一种进程间通信的方式,通过向另一个进程发送软中断信号,来实现消息的传递和处理。在实验中,我通过编写一个简单的程序,展示了如何使用软中断信号在两个进程之间进行通信。 通过本次实验进一步认识了并发执行的实质,了解到了进程互斥的进程竞争资源的现象。 |
进程软中断通信
最新推荐文章于 2024-05-07 17:24:14 发布