进程的介绍以及使用

概念了解

  • 程序、进程
    程序是静态概念,pro文件
    进程是程序的一次运行活动 动态
  • 查看进程
    ps指令//用grep来过滤
    比如ps -aux|grep init
    也可以用top指令 与任务管理器类似
  • 进程标识符
    pid 每个进程都有一个非负整数
    pid=0:成为交换进程 作用:进程调度
    pid=1:init过程 作用:系统初始化
    调用getpid来获取
  • 父子进程
    进程a创建了进程b
  • c程序的存储空间分配
    太麻烦了 不写了 自己了解
    bss 正文段 栈 堆 高地址

fork函数

创建进程
在这里插入图片描述
在这里插入图片描述
fork的俩个返回值的意思:拷贝一份给子进程,一份给父进程,且为子进程pid号。
父进程和子进程互相不影响(全拷贝)
现在为写时拷贝,只有子进程在动手脚是才会复制一份。

fork创建子进程的目的

父子同时执行不同的代码,网络服务进程中应用

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

int main()
{
        pid_t pid;
        int num;

        while(1)
        {
                printf("please enter a number:");
                scanf("%d",&num);
                printf("\n");
                if(num == 1)
                {
                        pid = fork();
                        if(pid > 0)
                        {
                                printf("i will go\npid is = %d",getpid());
                        }
                        else if(pid == 0)
                        {
                                printf("my first son will go\npid is = %d",getpid());
                        }
                }
                else     printf("none!\n");
        }

        return 0;
}

在这里插入图片描述

vfork函数

直接使用父进程存储空间,不拷贝。保证子进程先运行,当子进程调用exit推出后,父进程才执行。

进程退出

1:main调用return
2:进程调用exit(),标准c库
3:进程调用_exit或者_Exit(),属于系统调用
·进程最后一个线程返回
·最后一个线程调用pthread_exit
异常退出:调用abort,最后一个线程对取消(cancellation)请求做出响应。

父进程等待子进程

用wait等待
在这里插入图片描述
各种退出码。返回的用wait接受,保存在地址中。
正常退出用WEXITSTATUS(status)。
在这里插入图片描述
关于wait:
1:如果其所有子进程还在运行,则阻塞
2:如果一个子进程已终止,正在等待父进程获取其终止状态,则取得该子进程的终止状态立即返回。
3:如果它没有任何子进程,则立即出错返回。

waitpid函数:

在这里插入图片描述
在这里插入图片描述
这里图有点糊WCONTINUED,WNOHANG,WUNTRACED。

exec族函数

https://blog.youkuaiyun.com/u014530704/article/details/73848573

#include <unistd.h>
extern char **environ;

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 execvpe(const char *file, char *const argv[],char *const envp[]);

这里有一个函数perror(“why”)
打出错误码
exec配合fork使用:
不想写

system函数

不能执行返回127;失败返回-1;成功返回进程状态值

popen函数

可以获取运行结果相比于system

https://blog.youkuaiyun.com/libinbin_1014/article/details/51490568

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llechee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值