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