2014-11-27 6 views
0

Я запускаю программу A.c одновременно, скажем, 5 раз. Часть кода приведен ниже:Невозможно убить процессы, выполняющиеся одновременно

int main(int argc, char *argv[]){ 

    char s = 0; 
    int i = 0; 
    pid_t procB_id = 0; 
    int retval = 0; 

    struct sigaction act; 
    ch = &c[0]; 
    memset(c, 0, 50); 

    // open the file entered in the command-line for reading 
    fptr = fopen(argv[1], "r"); 

    if(fptr == NULL){ 
      printf("Error - input file could not be opened for reading!\n"); 
     exit(EXIT_FAILURE); 
     } 

    // Write characters read by file pointer to an array 
    while((s=fgetc(fptr)) != EOF){ 
     ch[i] = s; 
     i++; 
    } 
    printf("Length of text: %d\n",i); 

    sigemptyset(&act.sa_mask); 
    act.sa_flags = SA_SIGINFO; 
    act.sa_sigaction = handlerA; 

    if((sigaction(SIGRTMIN, &act, NULL)) != 0){ 
     printf("Signal could not be registered!\n");  
    } 

    //get PID of daemon B to be able to send it a real-time signal, indicating that A has started 
    procB_id = getBprocessID(); 

    printf("PROCESS ID OF B: %d\n", (int) procB_id); 

    //call sendSignal() method to send real-time signal to B 
    retval = sendBSignal(procB_id); 

    if(retval == 1){ 

     while(n < 0){ 
      //printf("BEFORE PAUSE\n"); 
      pause(); 
     } 
     //writeToFIFO(n); 
     if(writeToFIFO(n) == 1){ 
      n = -1; 
      exit(EXIT_SUCCESS); 
     } 
    } 


    while (1); 
} 

Соответствующая часть кода действительно выход (EXIT_SUCCESS). Однако, когда я запускаю процесс A параллельно, выходит только 1 процесс, а не остальные. Остальные все еще работают. Я бег процесса параллельно с помощью следующего скрипта:

for ((i=1;i<=5;i++)) 

do 

    ./A file.txt & 
done 

«file.txt» представляет собой файл, каждый процесс должен читать отдельно. Я хочу убить все 5 процессов, а не только один. Кто-нибудь знает, как я могу это сделать? Пожалуйста помоги. Я предполагаю, что мой код неправильный, но я не знаю, что делать здесь.

+0

Что 'getBprocessID',' sendBSignal', 'writeToFIFO' делать? –

+0

И почему бесконечный цикл 'while (1);' в конце? Вы потеряли блок do 'do {} while (1);' при копировании? –

+0

На самом деле каждый процесс является клиентом, который считывает файл и записывает его на собственный FIFO. Затем запущенный сервер считывает FIFO и записывает его в другой файл. Что касается бесконечного цикла, я даже не думал, что это необходимо, но без него сервер не может отправить сигнал нескольким клиенту. – user3033194

ответ

2

Я хочу убить все 5 процессов, а не только один. Кто-нибудь знает, как я могу это сделать?

pkill -f "A file.txt" 

Вы, вероятно, потерял do петлю для бесконечного while(1):

do { 
    procB_id = getBprocessID(); 

    printf("PROCESS ID OF B: %d\n", (int) procB_id); 

    //call sendSignal() method to send real-time signal to B 
    retval = sendBSignal(procB_id); 

    if(retval == 1){ 
     while(n < 0){ 
      //printf("BEFORE PAUSE\n"); 
      pause(); 
     } 
     //writeToFIFO(n); 
     if(writeToFIFO(n) == 1){ 
      n = -1; 
      exit(EXIT_SUCCESS); 
     } 
    } 
} while (1); 
Смежные вопросы