进程创建
system()函数:用于在程序中执行一条命令
如果shell不能运行,返回127,如果发生其他错误返回-1;
例子:int ret_val = system(“ls -l /”);
fork()函数:创建当前进程的副本作为子进程
原型:pid_t fork();
返回值为0(新创建的子进程)和子进程的PID(父进程)
//使用fork()函数创建进程的副本#include#include #include using namespace std;int main(){ cout << "the main program process ID is" << (int)getpid() << endl; pid_t child_pid = fork(); if (child_pid != 0) { cout << "this is the parent process,with id" << (int)getpid() << endl; cout << "the child's process ID is " << (int)child_pid << endl; } else { cout << "this is the child process,with id " << (int)getpid() << endl; } return 0;}
执行命令
exec()函数簇:不同情况,执行不同的exec()函数
基本模式:在程序中调用fork()创建一个子进程,然后调用exec()在子进程中执行命令
#include#include #include #include int spawn(char *program, char **args);int main(){ char *args[] = { "ls","-l","/",NULL }; spawn("ls", args); cout << "done" << '\n'; return 0;}//创建一个子进程运行新程序//program为程序名,arg_list为程序的参数列表;返回值为子进程idint spawn(char * program, char **args){ pid_t child_pid = fork(); //复制进程 if (child_pid ! = 0) //此为父进程 { return child_pid; } else //此为子程序 { execvp(program, args); //执行程序,按路径查找 //只有发生错误时,该函数才返回 std::cerr << "Error occurred when executing execvp.\n"; abort(); }}