009
11.08.2009, 17:25 Uhr
0xdeadbeef
Gott (Operator)
|
Ja ne, wenn du den Kram in eine abgekoppelte Sub-Subshell auslagerst, dann wartet dein Prozess nicht darauf, dass er zurückkommt. Eine einfache Möglichkeit wäre, das & am Ende des Kommandos zu entfernen, allerdings wäre es natürlich bedeutend schöner, das ganze mit fork, exec* und wait zu machen.
Im einfachsten Fall könnte das etwa so aussehen:
C++: |
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h>
#include <stddef.h> #include <stdio.h> #include <stdlib.h>
void do_stuff(int min, int max, int n);
int main(void) { size_t n; int *mins, *maxs, *ns; pid_t pid;
// Initialisieren der Eingabedaten // Insbesondere Speicher für die Arrays
for(size_t i = 0; i < n; ++i) { pid = fork();
if(pid == 0) { do_stuff(mins[i], maxs[i], ns[i]); // kehrt nie zurück. } }
for(size_t i = 0; i < n; ++i) { wait(NULL); }
// Aufräumen
return 0; }
void do_stuff(int min, int max, int n) { char minarg[50], maxarg[50], narg[50]; sprintf(minarg, "min=%d", min); sprintf(maxarg, "max=%d", max); sprintf( narg, "n=%d", n);
execlp("nohup", "nice", "-n", "19", "./ProgA", minarg, maxarg, narg, NULL); }
|
Einfacher wäre aber wohl, das ganze von vorneherein als Shellskript anzulegen.
Nachtrag: Oder du benutzt ein dafür ausgelegtes Framework, wie etwa http://taktuk.gforge.inria.fr/ -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 11.08.2009 um 17:31 Uhr von 0xdeadbeef editiert. |