# [C/C++] Befehl ausführen



## pc-world (17. Okt 2011)

Ich möchte mit C(++) in Linux einen Befehl wie "unzip abc.zip" ausführen. Dabei muss ich mehr oder weniger Live-Zugriff auf stdout/stderr haben, und die Möglichkeit haben, über einen anderen Thread den Befehl/ausgeführten Prozess zu terminieren.

popen scheidet wohl aus, da es u. a. fork benutzt, und fork so wie ich es verstanden habe auch alle anderen momentan laufenden Threads kopiert und es somit natürlich zu Fehlern kommen würde.

Hat jemand Ideen wie ich das umsetzen könnte?


----------



## energy47 (18. Nov 2011)

warum soll das nicht gehen.. 
du kannst doch über die ID die fork zurückgibt steuern was welcher prozess macht..
erzeugst ein child prozess am anfang und die threads startest du im parent prozess...

```
pid_t = pid;
pid = fork();

if(pid == 0) {
   //child przess
   do unzip abz.zip
}
if(pid > 0) {
   //parent prozes
   do thread1
   do thread2
   ...
}
```

vielleicht hilft das als anregung..


----------



## pc-world (19. Nov 2011)

Das habe ich zu Multithreading und fork gefunden: Threads and fork(): think twice before mixing them. | Linux Programming Blog
In meinem Fall hat es (scheinbar) keine Probleme gemacht.

Für meinen Code habe ich nun eine abgewandelte Funktion von dieser benutzt: Simple popen2 implementation [c] [unix] [ipc] [popen] [popen2] [pipes]
U. a. habe ich das "sh -c" entfernt und direkt den Pfad zur executable angegeben, da sonst das terminieren per kill nicht funktioniert hat.


----------

