一個多進程併發執行程序ps命令 ls命令

實驗要求:編寫一個多進程併發執行程序。父進程首先建立一個執行 ls 命令的子進程然//後再建立一個執行ps 命令的子進程,並控制ps 命令總在 ls 命令以前執行。
//Copyright:(C) 2013.4 By ZhengDujin
//Linux Ubuntu12.04 Gcc Vim
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
typedef void (*sighandler_t)(int);
void sigcat(){
printf("Coming back to the process %d.\n",getpid());
}
int main(){
int status;//存放子進程返回狀態
pid_t pls,pps;//存放子進程號
signal(SIGINT,(sighandler_t)sigcat);//註冊一個本進程處理鍵盤中斷的函數
char *args1[]={"/bin/ls","-a",NULL};
char *args2[]={"/bin/ps","-l",NULL};
pls=fork();//建立子進程運行命令 /bin/ls
//printf("Process %d is created which for /bin/ls.\n",getpid());
if(pls<0){
    printf("Error ocurrs while creating new process.\n");
    exit(EXIT_FAILURE);
}
else if(pls==0){//子進程代碼段
    printf("Process %d is waiting for /bin/ps running.\n",getpid());
    pause();//暫停,接收SIGINT信號後繼續執行
    printf("/bin/ls is going to be run in process %d.\n",getpid());
    status=execve(args1[0],args1,NULL);//裝入並執行新程序
    printf("Error ocurrs while running /bin/ls.\n");
    exit(EXIT_FAILURE);
}
else{
    pps=fork();//建立子進程運行命令 /bin/ps
   // printf("Process %d is created which for /bin/ps.\n",getpid());
    if(pps<0){
      printf("Error ocurrs while creating new process:Abort\n");
      exit(EXIT_FAILURE);
    }
    else if(pps==0){
      printf("Process %d is going to run /bin/ps.\n",getpid());
      status=execve(args2[0],args2,NULL);//裝入並執行新程序
      printf("Error ocurrs while running /bin/ps.\n");
      exit(EXIT_FAILURE);
    }
    else{
      waitpid(pps,&status,0);
      printf("Sending signal to Process %d.\n",pls);
      if(kill(pls,SIGINT)<0){//發送SIGINT信號使進程繼續運行命令 /bin/ls.
        printf("Error ocurrs while sending a signal to a child process.\n");
        exit(EXIT_FAILURE);
      }
      waitpid(pls,&status,0);
    }
}
return 0;
} 併發

相關文章
相關標籤/搜索