等待来自父母的信号,然后工作并再次阻塞

时间:2019-12-03 06:25:37

标签: linux signals posix ipc

编写一个可以显示文本字符串(仅由26个字母和空格组成)的程序。该程序应派生27个工作进程。每个工作进程都运行一个无限循环,在该进程中,它等待来自控制器(即父进程)的信号,休眠1秒,打印其预定义字符,向控制器发出信号,然后再次阻塞。控制器从键盘上读取一个字符串,然后以正确的顺序向工人发出信号以显示该字符串 以下是我的代码,但是我没有得到输出,它没有打印任何内容。

setCurrentItemId

1 个答案:

答案 0 :(得分:0)

  1. 首先,切勿使用fun getActionIntent(uri : String?) { val phoneIntent = Intent(Intent.ACTION_VIEW) phoneIntent.data = Uri.parse("tel:$uri") phoneIntent.setPackage("com.whatsapp") ctxt.startActivity(Intent.createChooser(phoneIntent, "Send Sms")) } 或类似的其他信号进行自定义使用。首选使用SIGCONTSIGUSR1SIGUSR2具有一些特殊的语义。

  2. 现在,即使将SIGCONT更改为CONT,使用USR1的方式也是一个问题。子进程唤醒后,它将被杀死,因为您没有捕获到信号。手册说:

  

pause() 使调用进程(或线程)进入休眠状态,直到出现          传递的信号会终止该过程或导致          调用信号捕捉功能。

  1. 孩子们永远不会发出正确的信号,因为您没有将pause()设置为正确的值。

  2. 您将永远不会经历正确的打印,因为写入被缓冲并且没有刷新。使用ppidprintf("%c",myChar); fflush(stdout);

这将导致类似的事情

printf("%c\n",myChar);
  1. 没什么好说的了,例如为什么循环到27岁?等,但这实际上是个小问题(这并不是说以后不要更正)。