2016-02-07 4 views
-1

У меня есть этот фрагмент кода, который я разработал, чтобы решить проблему, которая у меня есть в другой крупной программе, которую я разрабатываю.Как остановить программу внутри родительского или дочернего процесса?

#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); 
      } 
     } 

} 

Моя цель проста, когда пользователь вводит quit.

Я просто показать

Бросить команда нашла

Выход ...

И есть задержка в одну секунду между каждым из этих трех точек.

Однако выход, который я получаю

Бросить команда нашла

Выход . другие вещи ..

Однако то, что, кажется, происходит в том, что родительский процесс возвращается, а затем выполняет другие вещи из вызывающей функции, прежде чем он продолжает печатать две другие точки. Как я могу избежать выполнения родительского процесса?

+0

Это не C! – Olaf

+0

@Olaf Это в основном c – Pro

+0

И искусственные задержки в программе всегда являются причиной раздражения, что усугубляет пользователя. – Olaf

ответ

0

Использование waitpid(), как это:

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

Используйте его здесь

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

где я должен это ждать? – Pro

+0

в основном процессе, после вилки – agent420