C++创建进程

1、利用fork(vfork)创建进程

(1)函数:pid_t fork(void);

(2)返回值:fork被调用一次,返回两次,在子进程中返回值是0,在父进程中,返回值是子进程id。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
int main(){
	int r = fork();
    //可以根据fork的返回值进行判断
	if(r == 0){
		//子进程
        //可以进行子进程操作
		printf("这是子进程pid:%d\tret:%d\n",getpid(),ret);
            //退出进程
          exit();

		}
	}else{
		
		//父进程
		printf("这是父进程pid:%d\tret:%d\n",getpid(),ret);
	}
 
	return 0;
}

vfork函数和fork函数用法一致,但fork不能保证子进程和父进程执行先后顺序,vfork可以保证子进程先执行。

2、利用system创建进程

(1)函数:system(const char cmdstring);

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
 
int main(void ){
    //    使用system调用系统命令
	system("shutdown /s /t 00");//关机
    
}

3、利用exec创建进程

(1)函数:exec函数簇作用是进程替换,在一个进程中根据指定文件名找到可执行文件,在进程内部执行该可执行文件

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
#include <stdio.h>
#include <unistd.h>
 
int main(int argc, char *argv[])
{
 
 /* /bin/ls:外部程序,这里是/bin目录的 ls 可执行程序,必须带上路径(相对或绝对)
	   ls:没有意义,如果需要给这个外部程序传参,这里必须要写上字符串,至于字符串内容任意
	   -a,-l,-h:给外部程序 ls 传的参数
	   NULL:这个必须写上,代表给外部程序 ls 传参结束
	*/
	execl("/bin/ls", "ls", "-a", "-l", "-h", NULL);
 
 // 如果 execl() 执行成功,下面执行不到,因为当前进程已经被执行的 ls 替换了
	perror("execl");
 printf("after exec\n\n");
 
 return 0;
}

4、三种方式的区别

(1)fork函数:复制进程映像。产生新的进程,新的pid、ppid与原来进程不同,与父进程是两个不同的进程,但共享父进程的数据空间、堆和栈。

(2)exec簇:使用新进程代替原有进程,系统从新进程运行,新进程与原来的进程pid相同。

(3)system:创建独立进程,拥有独立的代码空间和内存空间,等待新进程执行完毕,system才返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值