测试积点老人 发表于 2022-3-3 13:22:37

linux中shell是如何实现让监控后台程序使其在需要阻塞式输入时自

本学期的一个proj是用c实现一个shell, 然而在job control部分实在无法解决这个问题,网上也查了好久并不能找到想要的信息。有猜想过是利用waitpid无阻塞获取子进程state来判断,但实际上sleep()与阻塞等待输入时的状态是一致的,而在系统bash中并不会暂停后台进程普通的sleep过程。另外,如果我想要用c实现,有什么相关的系统调用和宏可以利用呢?特来向各位大神们请教。补充:最新了解到了SIGTTIN,SIGTTOU信号,查到的解释会对其所在作业的所有进程发送此信号当其在申请I/O时。由于proj的要求不可以使用system(), 以至于stty tostop之类的并不能使用, 所以想要进一步请教,此信号究竟是发给谁的?父进程是否可以通过捕获此信号来向子进程发送SIGSTOP信号来实现本问题?补充2: 问题已经解决了,查到了tcsetpgrp相关的函数,可以通知内核哪个是前台进程从而做到手动的切换前后台进程。

qqq911 发表于 2022-3-4 10:04:19

用perf看看把

jingzizx 发表于 2022-3-4 10:38:56

没太了解,感觉是要有内部的设计
页: [1]
查看完整版本: linux中shell是如何实现让监控后台程序使其在需要阻塞式输入时自