i tried system(), but somehow when the secondary program runs, my main program(primary program which executes the secondary) hangs
and second issue is how do i obtain the process id of the secondary program in my main program?
The two commands can be joints using ; or && . In the second case, the pid will be set only if the first command succeeds. You can get the process id from $pid . OP wants to get the PID so he can kill it later. ; and && require the original process to exit before the echo $! is executed.
How to get PID using Task Manager. Press Ctrl+Shift+Esc on the keyboard. Go to the Processes tab. Right-click the header of the table and select PID in the context menu.
In the parent process you want to fork
.
Fork creates an entirely new process and returns either the child process's pid
to the calling process, and 0
to the new child process.
In the child process you can then use something like execl
to execute your desired secondary program.
In the parent process you can use waitpid
to wait for the child to complete.
Here is a simple illustrative example:
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
#include <cstdio>
#include <cstdlib>
int main()
{
std::string cmd = "/bin/ls"; // secondary program you want to run
pid_t pid = fork(); // create child process
int status;
switch (pid)
{
case -1: // error
perror("fork");
exit(1);
case 0: // child process
execl(cmd.c_str(), 0, 0); // run the command
perror("execl"); // execl doesn't return unless there is a problem
exit(1);
default: // parent process, pid now contains the child pid
while (-1 == waitpid(pid, &status, 0)); // wait for child to complete
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
{
// handle error
std::cerr << "process " << cmd << " (pid=" << pid << ") failed" << std::endl;
}
break;
}
return 0;
}
Use fork to create a new process, then exec to run a program in the new process. There are many such examples.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With