user2973468
user2973468

Reputation: 45

Create new process in separate function [c]

I wanna create spare process (child?) in specific function called eg. void process(). I want just to create that child process and do nothing with it. I just wanna it alive and do nothing while main() of my app will be working as I want. In some point of my app's main() I will be killing child process and then respawn it again. Any ideas how to do that ?

I have something like that but when I'm using this function to create process I get everything twice. Its like after initiation of process() every statement is done twice and i dont want it. After adding sleep(100) after getpid() in child section seems working fine but I cannot kill it.

int process(int case){

   if(case==1){
            status=1;
            childpid = fork();      
            if (childpid >= 0) /* fork succeeded */
            {
                if (childpid == 0) /* fork() returns 0 to the child process */
                {
                    printf("CHILD  PID: %d\n", getpid());
                }
        /* fork() returns new pid to the parent process *//*        else 
                {
                }*/
            }
            else
            {
                perror("fork"); 
                exit(0); 
            }
    }  
    else{
        if(status!=0){
            status=0;
            //kill!!!!

            system(a); //getting kill -9 PID ; but PID is equal 0 here...
            printf("\nkilling child");
        }
    }           
    }

how to just spawn new child process and let it just exist, like some sort of worker in C#?

Upvotes: 0

Views: 5082

Answers (1)

VHarisop
VHarisop

Reputation: 2826

Assuming you are in Linux, here's an example that might clarify your view: parent process spawns a child, the child calls pause() which suspends it until a signal is delivered, and finally parent process kill's the child with SIGKILL.

#include <unistd.h>
#include <signal.h>
#include <stdio.h>

int main()
{
    pid_t pid;
    pid = fork();

    if (pid < 0) { perror("fork"); exit(0); }

    if (pid == 0) {
       printf("Child process created and will now wait for signal...\n");
       pause(); //waits for signal
    }
    else {
       //do some other work in parent process here
       printf("Killing child (%ld) from parent process!", (long) pid);
       kill(pid, SIGKILL);
    }
    return 0;
}

Please note that fork() returns:

  • <0 on failure
  • 0 in child process
  • the child's pid in parent process.

Upvotes: 2

Related Questions