[linux专题]linux进程启动方法

目录

1.编写一个测试进程

2.使用system 方式调用

 3.使用exec 方式调用

4.使用fock方式调用

5.说明


1.编写一个测试进程

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("this is pid test \n");
    return 0;
}

编译

gcc pid_test.c -o pid_test

得到pid_test 测试程序

2.使用system 方式调用

int system(const char *string);

编写system调用代码

#include <stdlib.h>
#include <stdio.h>
 
int main()
{
    system("/home/agm/project/agm_test/pid_test/pid_test");
    printf("system done\n");
    exit(0);
}

编译

gcc pid_system.c -o pid_system

得到pid_system 程序

调用结果为

 

 3.使用exec 方式调用

int execl(const char *path,const char *arg0,...,(char*)0);
int execlp(const char *file,const char *arg0,...,(char*)0);
int execle(const char *path,const char *arg0,...,(char*)0,char *const envp[]);

int execv(cosnt char *path,char *const argv[]);
int execvp(cosnt char *file,char *const argv[]);
int execve(cosnt char *path,char *const argv[],char *const envp[]);
  • path/file:进程命令路径/进程命令名
  • argc:命令参数列表
  • envp:新进程的环境变量
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
    execlp("/home/agm/project/agm_test/pid_test/pid_test","",(char*)0);
    printf("exec Done \n");
    exit(0);
}

编译执行,得到结果如下,这里调用后替换了,不会打印 done 

4.使用fock方式调用

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>

int main()
{
    int stat = 0;
    pid_t pid = fork();
    switch(pid)
    {
        case -1:/*fork error*/
            perror("fork failed");
            exit(1);
            break;
        case 0:/*fork test*/
            printf("\n");
            execlp("/home/agm/project/agm_test/pid_test/pid_test","",(char*)0);
            break;
        default:/*parent*/
            pid = wait(&stat);
            printf("fork parent,test thread is done\n");
            break;
    }
    exit(0);
}

编译执行得到结果如下

5.说明

  • system函数最简单,启动shell进程,并在shell进程中执行新的进程。效率不高,system函数必须等待子进程返回才能接着执行。
  • exec系列函数用新进程替换掉原进程,但不会返回到原进程,除非调用失败。该函数继承了许多原进程的特性,效率也较高。
  • fork函数,复制一个子进程,和父进程一模一样,但是拥有自己的内存空间。父子进程执行互不影响。需要注意僵尸子进程的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值