进程控制

/* #include<sys/types.h> #include<unistd.h> <1> pid_t getpid(void) 获取进程 <2> pid_t getppid(void) 获取父进程ID <3> pid_t fork(void) 创建子进程 被调用一次,返回两次,三个不同的返回值 1.在父进程中,fork返回新创建的子进程的PID 2.在子进程中,fork返回0 3.如果出现错误,fork返回一个负值 <4> shell 查看系统进程 ps <5> pid_t vfork(void) 功能:创建子进程 区别 fork 子进程拷贝父进程的数据段,父,子进程执行顺序不确定 vfork 子进程于父进程共享数据段,子进程先运行,父进程后运行 <6> int execl(const char *path, const char *arg1,...) path 被执行程序名(含完整路径) arg1-argn 被执行程序所需的命令行参数,含程序名。以空指针NULL结束 <7> int execlp(const char *path, const char *arg1,...) path 被执行程序名(不含路径,将从path环境变量中查找该程序) <8> int execv(const char *path, char *const argv[]) path 被执行程序名(含完整路径) <9> #include <stdlib.h> int system(const char *string) 调用fork产生子进程,由子进程来调用/bin/sh -c string 来执行string所代表的命令 <10> #include<sys/types.h> #include<sys/wait.h> pid_t wait(int *status) 阻塞该进程,直到其某个子进程退出 */ #include <stdio.h> #include <unistd.h> void testfork() { pid_t pid; pid = fork(); // if(pid<0) { puts("创建失败/n"); } if(pid==0) { printf("在子进程中 PID=%d/n",getpid()); }else { printf("在父进程中 PID=%d/n",getpid()); } } void testCount() // 打印两次, 代码段共享,子进程会复制父进程的数据段,所以他们分别各自执行自己的数据段 { int count=0; pid_t pid; pid = fork(); count++; printf("count=%d/n",count); } void testCountvfork() // 打印两次, 数据段,代码段共享 , { int count=0; pid_t pid; pid = vfork(); // 有错误,不知道怎么改 count++; printf("count=%d/n",count); } testexecl() { execl("/bin/ls","-l","/home/lwg",NULL); } void main() { //printf("PPID = %d /n",getppid()); //printf("PID = %d /n",getpid()); //testfork(); //testCount(); //testCountvfork() ; testexecl(); }

你可能感兴趣的:(进程控制)