IcyPurity 2020-05-05 17:47 采纳率: 100%
浏览 195
已采纳

linux中shell是如何实现让监控后台程序使其在需要阻塞式输入时自动从S状态进入T状态暂停的。

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

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

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

特来向各位大神们请教。

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

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

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-05-05 19:47
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来