本学期的一个proj是用c实现一个shell, 然而在job control部分实在无法解决这个问题,网上也查了好久并不能找到想要的信息。

有猜想过是利用waitpid无阻塞获取子进程state来判断,但实际上sleep()与阻塞等待输入时的状态是一致的,而在系统bash中并不会暂停后台进程普通的sleep过程。

另外,如果我想要用c实现,有什么相关的系统调用和宏可以利用呢?

特来向各位大神们请教。

补充:最新了解到了SIGTTIN,SIGTTOU信号,查到的解释会对其所在作业的所有进程发送此信号当其在申请I/O时。由于proj的要求不可以使用system(), 以至于stty tostop之类的并不能使用, 所以想要进一步请教,此信号究竟是发给谁的?父进程是否可以通过捕获此信号来向子进程发送SIGSTOP信号来实现本问题?

补充2: 问题已经解决了,查到了tcsetpgrp相关的函数,可以通知内核哪个是前台进程从而做到手动的切换前后台进程。


  • 西西    2020-05-06 10:22:50
  • 阅读 921    收藏 0    回答 1
  • 邀请
  • 收藏
  • 分享
发送
登录 后发表评论
  • 51testing软件测试圈微信