Running shell command in program c

I want to run a shell command in my c program. But the fact is that I do not want my program to wait for the command to complete. There is no need to read the output of the shell command (it somehow does not return data). In principle, is this possible?

+7
source share
4 answers

fork() and system() are what you need

+5
source

Of course, just fork and exec : use fork to create a new process, and in the child process use exec to start the shell with your command. execv accepts the arguments that you usually pass to the shell.

Your code might look like this:

 pid_t child_pid = fork(); if (child_pid == 0) { // in child /* set up arguments */ // launch here execv("/bin/sh", args); // if you ever get here, there been an error - handle it } else if (child_pid < 0) { // handle error } 

the child process will send a SIGCHLD signal when it dies. This code, specified in the POSIX standard (SUSv4), will handle the following:

 static void handle_sigchld(int signum, siginfo_t *sinfo, void *unused) { int status; /* * Obtain status information for the child which * caused the SIGCHLD signal and write its exit code * to stdout. */ if (sinfo->si_code != CLD_EXITED) { static char msg[] = "wrong si_code\n"; write(2, msg, sizeof msg - 1); } else if (waitpid(sinfo->si_pid, &status, 0) == -1) { static char msg[] = "waitpid() failed\n"; write(2, msg, sizeof msg - 1); } else if (!WIFEXITED(status)) { static char msg[] = "WIFEXITED was false\n"; write(2, msg, sizeof msg - 1); } else { int code = WEXITSTATUS(status); char buf[2]; buf[0] = '0' + code; buf[1] = '\n'; write(1, buf, 2); } } 
+5
source

Try using this code:

 #include <stdlib.h> #include <unistd.h> int main(int argc, char ** argv) { if (!fork()) { execv("ls", {"myDir"}); /* Your command with arguments instead of ls. */ } } 
+1
source

How about just pressing a command using system ("command &") ?

+1
source

All Articles