在ac程序中运行一个shell命令

我想在我的c程序中运行一个shell命令。 但事情是,我不想让我的程序等待,直到命令执行。 不需要读取shell命令的输出(无论如何都不返回数据)所以基本上,这是可能的吗?

fork()system()是你需要的

当然,只要forkexec :使用fork来创建一个新的进程,并在子进程中,使用exec来启动你的shell命令。 execv接受你通常给shell的参数。

你的代码可能是这样的:

 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's been an error - handle it } else if (child_pid < 0) { // handle error } 

子进程在死时会发送一个SIGCHLD信号。 这个引用POSIX标准(SUSv4)的代码将处理:

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

尝试这样的代码:

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

简单地用system ("command &")来放大命令呢?