2016-02-07 2 views
-1

J'ai ce morceau de code que j'ai développé juste pour résoudre un problème que j'ai dans un autre grand programme que je développe.Comment puis-je arrêter le programme dans le processus parent ou enfant?

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <cstring> 
#include <cstdlib> 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <errno.h> 
#include <limits.h> 
#include <string> 
#include <iostream> 

using namespace std; 
void processLine (char []); 
void readLine(char []); 

const int LIMIT = 512; 
int main(int argc, char *argv[]) 
{ 
    char oneLine[LINE_MAX]; 
    readLine(oneLine); 


    return 0; 
} 
void readLine(char line[]) 
{ 
    processLine(line); 


//Otherstuff 
------------ 

} 
void processLine(char line[]) 
{ 

    pid_t process; 
    int child_status; 

    string input; 
    cout << "Input: "; 
    cin >> input; 


     process = fork(); 
     if(process == 0) 
     { // do nothing 
     } 
     else 
     { 
         //parent 
        if(input == "quit") 
      { 
       printf("Quit command found ! \nExiting "); 

       for(int i = 0;i < 3;i++) 
       { 
        printf("."); 
        fflush(stdout); 
        sleep(1); 

       } 

       printf("\n"); 
        exit(0);    
      } 
      else 
      { 
       wait(&child_status); 
      } 
     } 

} 

Mon but est simple, lorsque l'utilisateur saisit quitter.

Je vais juste afficher

quit trouvé

... Sortie

Et il y a un retard d'une seconde entre chacun de ces trois points.

Cependant la sortie que je reçois est

quit trouvé

Sortie. d'autres choses ..

Cependant, ce qui semble se produire est que le processus revient mère et exécute ensuite d'autres choses de la fonction d'appel avant qu'il continue d'imprimer les deux autres points. Comment éviter le processus parent de faire cela?

+0

Ce n'est pas C! – Olaf

+0

@Olaf Ceci est principalement c – Pro

+0

Et les retards artificiels dans un programme sont toujours cause d'irritation et aggravent l'utilisateur. – Olaf

Répondre

0

Utilisez waitpid() comme ceci:

pid_t childPid; 
childPid = fork(); 
... 
int returnStatus;  
waitpid(childPid, &returnStatus, 0); // Parent process waits here for child to terminate. 

Utilisez ici

if(childPid == 0) // fork succeeded 
{ 
    // Do something 
    exit(0); 
} 
else // Main (parent) process after fork succeeds 
{  
    int returnStatus;  
    waitpid(childPid, &returnStatus, 0); 
} 
+0

où dois-je faire cela attendre? – Pro

+0

dans le processus principal, après la fourche – agent420