似乎是一个基本想法:我想打印一个我在C中制作的迷你shell的提示。这是我对提示的意思的一个例子:
$ ls
$
是“提示”。我正在制作的这个小迷你shell支持通过在行尾添加&
符号的正常bash表示法来处理进程。像$ ls &
一样。
我的逻辑当前是在我的主命令循环中,如果进程不是背景,那么打印出提示符:
if(isBackground == 0)
prompt();
然后在我的信号处理程序中,我使用write()
打印出提示,其中包含了作为后台进程的情况。
如果后台命令像快速$ ls &
一样立即返回,这样可以正常工作,但是在类似$ sleep 10 &
的情况下,shell看起来会被阻止,因为提示不会打印出来,直到它碰到信号处理程序。
我无法弄清楚如何解决这个问题,因为我不知道后台进程何时结束,这意味着信号处理程序需要在何时打印新提示,因为如果后台进程碰巧有一个输出,它会输出,然后不再有提示。
如何解决此问题?有没有更好的方法来做到这一点,我没想到可以解决我的问题?