Ik ben voor school bezig met het programmeren van een shell. Het parse gedeelte is al klaar (was niet denderend moeilijk), maar nu ben ik het uitvoeren van de geparsede commando's aan het uitwerken. Ergens in mijn programma maak ik met behulp van de pipe() systemcall een pipe aan (of meerdere, afhankelijk van het aantal pipelines). Dit werkt op zich prima en de uitvoer van bijvoorbeeld 't onderstaande commando is ook zoals verwacht:
Nu loop ik echter tegen een aantal problemen aan. In de eerste plaatst viel mij op dat de uitvoer van wc één teken minder gaf dan wanneer ik hetzelfde commando uitvoerde in bash. Dus ben ik even op onderzoek gegaan en nu blijkt dat het ls en het wc commando blijven hangen op de één of andere manier. ps -A geeft namelijk de volgende uitvoer:
Nou weet ik dat voordat een programma daadwerkelijk wordt beïndigd je een wait moet uitvoeren om de PCB te clearen, maar aangezien ik bij een pipe alle commando's tegelijkertijd moet uitvoeren kan ik natuurlijk niet wachten tot een proces klaar is voordat ik het volgende uit ga voeren. Dus, zijn er mensen met ideeën hoe ik dat kan oplossen?
code:
1
| ls -l | cat | wc |
Nu loop ik echter tegen een aantal problemen aan. In de eerste plaatst viel mij op dat de uitvoer van wc één teken minder gaf dan wanneer ik hetzelfde commando uitvoerde in bash. Dus ben ik even op onderzoek gegaan en nu blijkt dat het ls en het wc commando blijven hangen op de één of andere manier. ps -A geeft namelijk de volgende uitvoer:
code:
1
2
| 4176 pts/0 00:00:00 ls <defunct> 4178 pts/0 00:00:00 wc <defunct> |
Nou weet ik dat voordat een programma daadwerkelijk wordt beïndigd je een wait moet uitvoeren om de PCB te clearen, maar aangezien ik bij een pipe alle commando's tegelijkertijd moet uitvoeren kan ik natuurlijk niet wachten tot een proces klaar is voordat ik het volgende uit ga voeren. Dus, zijn er mensen met ideeën hoe ik dat kan oplossen?