进程环
来源:互联网 发布:python execute 编辑:程序博客网 时间:2024/04/25 12:58
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include "mystring.h"
- #include "file.h"
- #include "tools.h"
- #include "myerror.h"
- #include "restart.h"
- int main(int argc,char * argv[]){
- int pfd[2];
- pid_t childpid;
- int i;
- int loopfork = 20;
- int errno;
-
- if( pipe(pfd) == -1 ){
- MyError("pipe is error!");
- return -1;
- }
- errno = dup2(pfd[0],STDIN_FILENO);
- errno = dup2(pfd[1],STDOUT_FILENO);
- if(errno == -1){
- MyError("dup2 is fail!");
- return -1;
- }
- errno = close(pfd[0]);
- errno = close(pfd[1]);
- if(errno == -1){
- MyError("close pfd0 or pfd1 is fail!");
- return -1;
- }
- for(i = 1;i < loopfork; i++){
- if( pipe(pfd) == -1 ){
- MyError("loopfork pipe is error!");
- return -1;
- }
- if( (childpid = fork()) == -1){
- MyError("loopfork fork is error!");
- return -1;
- }
- if(childpid > 0){
- errno = dup2(pfd[1],STDOUT_FILENO);
- }
- if(childpid == 0){
- errno = dup2(pfd[0],STDIN_FILENO);
- }
- if(errno == -1){
- MyError("loopfork dup2 is fail!");
- return -1;
- }
- errno = close(pfd[0]);
- errno = close(pfd[1]);
- if(errno == -1)
- return -1;
- if(childpid)
- break;
- }
-
- fprintf(stderr,"process is NO.%d,pid is %ld,ppid is %ld/n",i,(long)getpid(),(long)getppid());
- return 0;
- }