]> ruin.nu Git - popboot.git/blobdiff - action.cpp
parallell
[popboot.git] / action.cpp
index 6e4b60785917cf7627c7ef1969b9621481c40022..52c1686f21f3bc09ac096c8cae91327013fc5d7c 100644 (file)
@@ -1,5 +1,7 @@
 #include "action.h"
 #include <cstdlib>
+#include <unistd.h>
+#include <sys/wait.h>
 #include <iostream>
 using namespace std;
 using namespace __gnu_cxx;
@@ -33,7 +35,21 @@ const Preconditions& Action::preconditions() const{
 
 int Action::execute() const{
        cout << "Executing: " << _name << endl;
-       return system(_executable.c_str());
+       //return system(_executable.c_str());
+       pid_t proc = fork();
+       if (proc == -1) return proc;
+
+       if (proc == 0) {
+               //execl("/bin/sh",  "-c", _executable.c_str(), (char*) NULL);
+               int val = system(_executable.c_str());
+               exit(val);
+       }
+       int retval;
+
+       waitpid(proc,&retval,0);
+
+       cout << "Done executing: " << _name << endl;
+       return retval;
 }
 
 const string& Action::name() const{