Sponsored Content
Top Forums Programming getting the return from forked child process to parent in C++ Post 302476908 by usustarr on Thursday 2nd of December 2010 08:39:50 PM
Old 12-02-2010
Here is the code, I finally managed to copy it. Creating fork and killing children all that works perfect in this. My issue is, bool return value from WaitForScmi2(waitForScmiTimeLimit), gets lost. I need to pass that value to parent process. Can you please tell me what I am doing wrong here?

Code:
bool System::WaitForScmi(U32 waitForScmiTimeLimit)
{

  
  int pid = fork();
  vector <int> childList;

  if (pid == -1)
  {
    termError("Fork failure in start method, errno %d = %s",
               errno, strerror(errno));
  }
  else if( pid == 0)
  {
    bool return_I_want_to_save = WaitForScmi2(waitForScmiTimeLimit);
    exit(0);
  }
  else
  {
    print("Executing recoverWaitForScmi, started child process: %u", pid);
    childList.push_back(pid);
  }

  if(return_I_want_to_save)
  {
    print("We did it!!!");
  }

  if(!KillChild(childList))// here is how i make sure all child process get killed
  {
     print("It seems like recoverWaitForScmi could not excute correct & ran in to a termError ");
     return(0);
  }
  else
  {
     return(1);
  }
}



bool System::KillChild(vector<int>& childList)
{
  vector <int>::iterator it;
  int childStatus;

  for ( it=childList.begin(); it < childList.end(); it++ )
  {
    int pid  = (*it);
    waitpid(pid, &childStatus, 0);//Wait for child
    if(childStatus)
    {
      // Kill all other children. 
      for (U32 i = 0; i < childList.size(); i++)
      {
        kill(childList[i], SIGINT);
      }
      print("Killing process: %u Complete.", pid);
      // termError("Exiting...");
      print("Exiting...");
      return(0);//indicating child process failure. This return has nothing to do with
                //if killing pass or fail. 
    }
    else
    {
      print("Process: %u Complete.", pid);
      return(1);//indicating child process success. 
                //Notice this return has nothing to do with if killing pass or fail
    }
  }
}

 

10 More Discussions You Might Find Interesting

1. Programming

parent and child process question?

Hi everybody, I'm trying to understand how a parent and child processes interact. This function( below) basically measures the fork time from the perspective of the parent only. what i would like to know is how to measure the time from the perspective of parent and child (ie: inserting... (0 Replies)
Discussion started by: tosa
0 Replies

2. Programming

getting the return code of forked child process (ftp)

Hi, From within my C++ program, I fork a child process and execl an ftp session (solaris), like this : std::string szStartCmd = "ftp -i -n -v 192.168.149.31"; int nExecRes = execl("/bin/sh", "sh", "-c", szStartCmd.c_str(), (char *)0); I use 2 pipes to communicate between my... (7 Replies)
Discussion started by: KittyJ
7 Replies

3. Shell Programming and Scripting

How to return control from the child script to the parent one?

I have two shell scripts : A.sh and B.sh A.sh echo "In A" exec B.sh echo "After B" B.sh echo "In B" The output is : In A In B I want the output : In A In B After B (4 Replies)
Discussion started by: suchismitasuchi
4 Replies

4. Shell Programming and Scripting

How to make the parent process to wait for the child process

Hi All, I have two ksh script. 1st script calls the 2nd script and the second script calls an 'C' program. I want 1st script to wait until the 'C' program completes. I cant able to get the process id for the 'C' program (child process) to make the 1st script to wait for the second... (7 Replies)
Discussion started by: sennidurai
7 Replies

5. Shell Programming and Scripting

[KSH/Bash] Starting a parent process from a child process?

Hey all, I need to launch a script from within 2 other scripts that can run independently of the two parent scripts... Im having a hard time doing this, if anyone knows how please let me know. More detail. ScriptA (bash), ScriptB (ksh), ScriptC (bash) ScriptA, launches ScriptB ScirptB,... (7 Replies)
Discussion started by: trey85stang
7 Replies

6. UNIX for Dummies Questions & Answers

Command to find parent and child process?

Hi, I have a script that calls other scripts/commands which may or may not spawn other process. From my understanding, when I do a ps -ef, the highest numbered process ID is supposed to be the parent ID of all the other related child processes, is this correct? In most or all... (3 Replies)
Discussion started by: newbie_01
3 Replies

7. Programming

Parent process starts before the child using signal, in C

Hi, i want that the parent process start before the child, this code doesn't work, if the child start before the parent it wait for signal, then the father send the signal SIGALRM and the child catch it and call printf; else the father call printf and send the signal to the child that call its... (1 Reply)
Discussion started by: blob84
1 Replies

8. Emergency UNIX and Linux Support

signal between parent process and child process

Hello, everyone. Here's a program: pid_t pid = fork(); if (0 == pid) // child process { execvp ...; } I send a signal (such as SIGINT) to the parent process, the child process receive the signal as well as the parent process. However I don't want to child process to receive the... (7 Replies)
Discussion started by: jackliang
7 Replies

9. Shell Programming and Scripting

forking a child process and kill its parent to show that child process has init() as its parent

Hi everyone i am very new to linux , working on bash shell. I am trying to solve the given problem 1. Create a process and then create children using fork 2. Check the Status of the application for successful running. 3. Kill all the process(threads) except parent and first child... (2 Replies)
Discussion started by: vizz_k
2 Replies

10. UNIX for Dummies Questions & Answers

Why is the return code of child required by parent ?

Hello everyone, I am a complete newbie to UNIX. I am using Debian LXDE 64-bit. I have a question regarding the child and parent process communication. According to wikipedia.org and various other sources, when a child process exits it sends the SIGCHLD signal to its parent... (1 Reply)
Discussion started by: sreyan32
1 Replies
FORK(2) 						      BSD System Calls Manual							   FORK(2)

NAME
fork -- create a new process LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <unistd.h> pid_t fork(void); DESCRIPTION
The fork() system call causes creation of a new process. The new process (child process) is an exact copy of the calling process (parent process) except for the following: o The child process has a unique process ID. o The child process has a different parent process ID (i.e., the process ID of the parent process). o The child process has its own copy of the parent's descriptors. These descriptors reference the same underlying objects, so that, for instance, file pointers in file objects are shared between the child and the parent, so that an lseek(2) on a descriptor in the child process can affect a subsequent read(2) or write(2) by the parent. This descriptor copying is also used by the shell to establish standard input and output for newly created processes as well as to set up pipes. o The child process' resource utilizations are set to 0; see setrlimit(2). o All interval timers are cleared; see setitimer(2). o The child process has only one thread, corresponding to the calling thread in the parent process. If the process has more than one thread, locks and other resources held by the other threads are not released and therefore only async-signal-safe functions (see sigaction(2)) are guaranteed to work in the child process until a call to execve(2) or a similar function. RETURN VALUES
Upon successful completion, fork() returns a value of 0 to the child process and returns the process ID of the child process to the parent process. Otherwise, a value of -1 is returned to the parent process, no child process is created, and the global variable errno is set to indicate the error. ERRORS
The fork() system call will fail and no child process will be created if: [EAGAIN] The system-imposed limit on the total number of processes under execution would be exceeded. The limit is given by the sysctl(3) MIB variable KERN_MAXPROC. (The limit is actually ten less than this except for the super user). [EAGAIN] The user is not the super user, and the system-imposed limit on the total number of processes under execution by a single user would be exceeded. The limit is given by the sysctl(3) MIB variable KERN_MAXPROCPERUID. [EAGAIN] The user is not the super user, and the soft resource limit corresponding to the resource argument RLIMIT_NPROC would be exceeded (see getrlimit(2)). [ENOMEM] There is insufficient swap space for the new process. SEE ALSO
execve(2), rfork(2), setitimer(2), setrlimit(2), sigaction(2), vfork(2), wait(2) HISTORY
The fork() function appeared in Version 6 AT&T UNIX. BSD
May 31, 2013 BSD
All times are GMT -4. The time now is 05:51 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy