首页 > 代码库 > Linux 进程创建
Linux 进程创建
一:system系统调用#include <stdlib.h>int system(const char *string);system函数传递给/bin/sh -c 来执行string所指定的命令。string中可以包含选项和参数如果没有找到/bin/sh。函数返回127,如果出现其他错误返回-1,成功返回0,但如果string为NULL,返回一个非0值system调用其他进程是通过shell调用其他进程,本程序进程与被调用的进程之间没有关系。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>int main(int arg, char * args[]){ system("ls -l"); return 0;}
二:fork系统调用#include<unistd.h>pid_t fork(void);fork执行成功,向父进程返回子进程的PID,并向子进程返回0,这意味着fork即使只调用一次,也会返回两次。fork创建的新进程是和父进程(除了PID和PPID)一样的副本。父进程和子进程之间有点区别,子进程没有继承父进程的超时设置(使用alarm调用)、父进程创建的文件锁,或者未决信号。但是子进程会继承父进程的文件描述符,内存空间大小,代码你不能预计父进程是在他的子进程之前还是之后运行,他的执行是无序的,是异步的。fork的异步行为意味着你不应该在子进程中执行依赖与父进程的代码,反之亦然。fork调用可能失败,原因是系统上已经运行了太多进程,已经超过了允许他执行的最大进程数。fork执行失败,会向父进程返回-1,而且不创建子进程。
fork执行成功,向父进程返回子进程的PID,向子进程返回0。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>int main(int arg, char * args[]){ pid_t child=fork(); if(child==-1) { printf("操作系统出错!\n"); return -1; } if(child==0) { //此时在子进程中 printf("child is begining!\n"); sleep(200); printf("child is end!\n"); }else { //此时在父进程中,child大于零,child的值就是子进程的PID printf("parent is begining!\n"); sleep(200); printf("parent is end!\n"); } /* 通过观察"/proc"下的父子进程,发现父子进程共用一段代码 */ return 0;}
Linux 进程创建
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。