| version 1.15, 2003/12/04 05:27:19 |
version 1.16, 2003/12/04 06:29:21 |
|
|
| /* $OpenXM: OpenXM/src/util/ox_pathfinder.c,v 1.14 2003/12/04 03:17:33 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/util/ox_pathfinder.c,v 1.15 2003/12/04 05:27:19 takayama Exp $ */ |
| /* Moved from misc-2003/07/cygwin/test.c */ |
/* Moved from misc-2003/07/cygwin/test.c */ |
| |
|
| #include <stdio.h> |
#include <stdio.h> |
| Line 141 int oxForkExec(char **argv) { |
|
| Line 141 int oxForkExec(char **argv) { |
|
| fprintf(stderr,"Cannot fork and exec.\n"); return -1; |
fprintf(stderr,"Cannot fork and exec.\n"); return -1; |
| } |
} |
| if ((pid = fork()) > 0) { |
if ((pid = fork()) > 0) { |
| oxResetRedirect(); |
oxResetRedirect(); |
| if (m&2) { |
if (m&2) { |
| /* Do not call singal to turn around a trouble on cygwin. BUG. */ |
/* Do not call singal to turn around a trouble on cygwin. BUG. */ |
| }else{ |
}else{ |
| Line 186 int oxForkExecBlocked(char **argv) { |
|
| Line 186 int oxForkExecBlocked(char **argv) { |
|
| fprintf(stderr,"Cannot fork and exec.\n"); return -1; |
fprintf(stderr,"Cannot fork and exec.\n"); return -1; |
| } |
} |
| if ((pid = fork()) > 0) { |
if ((pid = fork()) > 0) { |
| oxResetRedirect(); |
oxResetRedirect(); |
| Myforkchildren[Myforkcp++] = pid; |
Myforkchildren[Myforkcp++] = pid; |
| if (Myforkcp >= MYFORKCP_SIZE-1) { |
if (Myforkcp >= MYFORKCP_SIZE-1) { |
| fprintf(stderr,"Child process table is full.\n"); |
fprintf(stderr,"Child process table is full.\n"); |
| Line 195 int oxForkExecBlocked(char **argv) { |
|
| Line 195 int oxForkExecBlocked(char **argv) { |
|
| if (waitpid(pid,&status,0) < 0) { /* blocked */ |
if (waitpid(pid,&status,0) < 0) { /* blocked */ |
| perror("waitpid"); |
perror("waitpid"); |
| } |
} |
| |
Myforkcp--; |
| return status; |
return status; |
| }else{ |
}else{ |
| /* close the specified files */ |
/* close the specified files */ |
| Line 1098 int oxDeleteFile(char *fname) { |
|
| Line 1099 int oxDeleteFile(char *fname) { |
|
| }else{ |
}else{ |
| return(-1); |
return(-1); |
| } |
} |
| |
} |
| |
|
| |
/* This function just kills processes, so if there is a process which |
| |
uses ox protocol, it is not relevant to use this functions. |
| |
*/ |
| |
int oxKillAll(void) { |
| |
int i; |
| |
int pid; |
| |
int status; |
| |
for (i=0; i<Myforkcp; i++) { |
| |
pid = Myforkchildren[i]; |
| |
signal(SIGKILL,myforkwait); |
| |
} |
| |
Myforkcp = 0; |
| |
return(0); |
| } |
} |