【Linux系统编程】21.echo、env、fork、getpid、getppid

目录

echo

PATH

SHELL

TERM

LANG

HOME

env

fork

返回值

getpid

getppid

测试代码1

测试结果

测试代码2

测试结果

父子进程相同

父子进程不同

父子进程共享

echo

查看单个环境变量。

PATH

可执行文件的搜索路径。

SHELL

当前Shell。

TERM

当前终端类型。终端类型决定了一些程序的输出显示方式。

LANG

语言和 ocale,决定了字符编码以及时间、货币等信息的显示格式。

HOME

当前用户主目录的路径。

echo $PATH
echo $TERM
echo $LANG
echo $HOME
echo $SHELL

env

打印全部的环境变量。

env

fork

创建一个子进程。

man 2 fork

 

返回值

失败:-1

成功:

  1. 父进程返回子进程的ID。

  2. 子进程返回0。

getpid

获取当前进程ID。

man 2 getpid

getppid

man 2 getppid

测试代码1

创建子进程,并输出进程ID。

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

int main(int argc, char *argv[])
{
    printf("程序开始运行!\n");
    printf("当前进程的ID是%d。\n", getpid());
    printf("开始创建进程!\n");
    pid_t jin_cheng = fork();
    printf("创建进程完成!\n");
    if (jin_cheng < 0)
    {
        perror("创建进程错误!");
    }
    else if (jin_cheng == 0)
    {
        printf("这是子进程,当前进程的ID是%d,父进程ID是%d。\n", getpid(), getppid());
        printf("子进程程序结束1!\n");
        printf("子进程程序结束2!\n");
    }
    else if (jin_cheng > 0)
    {
        printf("这是父进程,当前进程的ID是%d,父进程ID是%d,子进程的ID是%d。\n", getpid(), getppid(), jin_cheng);
        printf("父程序结束1!\n");
        sleep(2);	//系统程序运行较快,增加延时查看程序并行运行的效果
        printf("父程序结束2!\n");
    }
    return 0;
}

测试结果

测试代码2

利用父进程创建多个子进程。

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

int main(int argc, char *argv[])
{
    int i;
    printf("程序开始运行!\n");
    printf("当前进程的ID是%d。\n", getpid());
    printf("开始创建进程!\n");
    for (i = 0; i < 5; i++)
    {
        if (fork() == 0) //子进程,不参与创建进程
        {
            break;
        }
    }
    if (i == 5)
    {
        sleep(5); //延时,最后输出父进程
        printf("这是父进程,当前进程的ID是%d。\n", getpid());
    }
    else
    {
        sleep(i); //延时i秒,按顺序输出
        printf("这是第%d个子进程,当前进程的ID是%d。\n", i + 1, getpid());
    }
    return 0;
}

测试结果

父子进程相同

        在刚调用fork函数结束后,父子进程相同的内容:data段、text段、堆、栈、环境变量、全局变量、宿主目录位置、进程工作目录位置、信号处理方式。同时,父进程先执行还是子进程先执行不确定。取决于内核所使用的调度算法。

父子进程不同

        父子进程不同的内容为:进程ID、返回值、各自的父进程、进程创建的时间、闹钟、未决信号集。

父子进程共享

        读时共享,写时复制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

因心,三人水

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

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

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

打赏作者

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

抵扣说明:

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

余额充值