当前位置: 首页 > article >正文

Linux--输入输出重定向、父进程与子进程的继承关系

一、重定向

        在Linux操作系统中,输入输出重定向用于改变命令的输入来源和输出目标。默认情况下,命令从标准输入(stdin,通常是键盘)读取数据,并将结果输出到标准输出(stdout,通常是终端屏幕)。重定向允许你将输入或输出指向文件或其他设备。

常见的重定向操作符

  1. 输出重定向 (>)
    • 将命令的输出写入文件,覆盖文件原有内容。
    • 示例:ls > file.txtls 的结果写入 file.txt,若文件已存在则覆盖。
  2. 追加输出重定向 (>>)
    • 将命令的输出追加到文件末尾,不覆盖原有内容。
    • 示例:ls >> file.txtls 的结果追加到 file.txt
  3. 输入重定向 (<)
    • 从文件读取输入,而不是键盘。
    • 示例:sort < file.txtfile.txt 读取内容并排序。
  4. 标准错误重定向 (2>)
    • 将错误信息写入文件,覆盖文件原有内容。
    • 示例:ls not_exist 2> error.txt 将错误信息写入 error.txt
  5. 标准错误追加重定向 (2>>)
    • 将错误信息追加到文件末尾,不覆盖原有内容。
    • 示例:ls not_exist 2>> error.txt 将错误信息追加到 error.txt
  6. 合并标准输出和标准错误 (&>)
    • 将标准输出和标准错误都写入同一文件,覆盖文件原有内容。
    • 示例:ls &> output.txt 将输出和错误都写入 output.txt
  7. 合并标准输出和标准错误追加 (&>>)
    • 将标准输出和标准错误都追加到同一文件,不覆盖原有内容。
    • 示例:ls &>> output.txt 将输出和错误都追加到 output.txt

示例

  • 输出重定向echo "Hello" > hello.txt 将 "Hello" 写入 hello.txt,覆盖原有内容。
  • 追加输出重定向echo "World" >> hello.txt 将 "World" 追加到 hello.txt
  • 输入重定向wc -l < hello.txt 统计 hello.txt 的行数。
  • 标准错误重定向ls not_exist 2> error.txt 将错误信息写入 error.txt
  • 合并输出和错误ls not_exist &> output.txt 将输出和错误都写入 output.txt

总结

输入输出重定向是Linux中强大的工具,能够灵活控制命令的输入和输出,常用于脚本编写和自动化任务。

二、在Linux中,子进程和父进程通过以下方式区分和继承关系:

1. 区分

  • 进程ID(PID):每个进程有唯一的PID,父进程的PID称为PPID。
  • 创建方式:子进程由父进程通过fork()系统调用创建,fork()返回两次,父进程中返回子进程的PID,子进程中返回0。

2. 继承关系

子进程继承父进程的以下属性:

  • 环境变量:子进程继承父进程的环境变量。
  • 文件描述符:子进程继承父进程打开的文件描述符。
  • 信号处理:子进程继承父进程的信号处理设置。
  • 工作目录:子进程继承父进程的当前工作目录。
  • 用户和组ID:子进程继承父进程的用户和组ID。

3. 示例代码

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

int main() {
    pid_t pid = fork();

    if (pid == 0) {
        // 子进程
        printf("子进程 PID: %d, 父进程 PID: %d\\\\n", getpid(), getppid());
    } else if (pid > 0) {
        // 父进程
        printf("父进程 PID: %d, 子进程 PID: %d\\\\n", getpid(), pid);
    } else {
        // fork失败
        perror("fork");
        return 1;
    }

    return 0;
}

4. 总结

  • 区分:通过PID和fork()的返回值区分父子进程。
  • 继承:子进程继承父进程的环境变量、文件描述符、信号处理、工作目录和用户/组ID。

理解这些机制有助于更好地管理进程间的关系和资源。


http://www.kler.cn/a/568271.html

相关文章:

  • 如何管理路由器
  • 金融赋能绍兴纺织 民生银行助力外贸中小微企业“走出去”
  • 新一代跨境电商ERP系统:从订单到发货的全流程自动化管理
  • windows下适用msvc编译ffmpeg 适用于ffmpeg-7.1
  • php 的 composer.phar 是干什么用的?
  • Vue3实现文件上传、下载及预览全流程详解(含完整接口调用)
  • 加油站小程序实战教程03站点管理
  • 《从0到1:用Python在鸿蒙系统开发安防图像分类AI功能》
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pstrdup函数
  • 计算机视觉(opencv-python)入门之图像的读取,显示,与保存
  • 【每日八股】MySQL篇(三):索引(上)
  • 如何让 Git 管理本地项目
  • 基于PHP+MySQL实现的毕业设计选题管理系统
  • 算法(四)——位运算与位图
  • Unity中动态切换光照贴图的方法
  • Android限制后台服务、广播和Activity,节省更多的电量
  • MAC 怎么设置 Java虚拟内存设置
  • vue+wsplayer对接大华的rtsp实时预览视频流
  • LangChain解锁LLM大语言模型的结构化输出能力:调用 with_structured_output() 方法
  • ORM Bee V2.5.2.x 发布,支持 CQRS; sql 性能分析;更新 MongoDB ORM分片