首页 > 系统相关 >子进程的输出重定向到父进程

子进程的输出重定向到父进程

时间:2024-09-09 10:39:11浏览次数:9  
标签:到父 重定向 service lock pid unlock fd mgmt 进程

 

int service_mgmt_start(struct service_base *service)
{
    pthread_mutex_lock(&(sg_service_mgmt.data_lock)); // lock
    if (service->running) {
        pthread_mutex_unlock(&(sg_service_mgmt.data_lock)); // unlock
        return 0;
    }
    if (service->prepare_handler) {
        int ret = service->prepare_handler(service);
        if (ret != 0) {
            RM_LOGE("service: %s prepare failed! code = %d", service->name, ret);
        }
    }

    RM_LOGI("service: %s prepare finished", service->name);

    int pid = fork();
    if (pid < 0) {
        perror("fork error:");
        pthread_mutex_unlock(&(sg_service_mgmt.data_lock)); // unlock
        return -1;
    }
    if (pid > 0) { /* parent */
        service->pid = pid;
        service->running = 1;
        RM_LOGI("fork success");

        if (!strstr(service->name, "bluetoothctl")) {
            waitpid(service->pid, NULL, 0);
            service->pid = 0;
            service->running = 0;
        }
        pthread_mutex_unlock(&(sg_service_mgmt.data_lock)); // unlock
        return 0;
    }
    /* child */
    pthread_mutex_unlock(&(sg_service_mgmt.data_lock)); // unlock
    // TODO: change output
    if (!strstr(service->name, "dnsmasq")) {
        int stdout_fd = open("/dev/null", O_WRONLY);
        int stderr_fd = open("/dev/null", O_WRONLY);
        dup2(stdout_fd, STDOUT_FILENO);
        dup2(stderr_fd, STDERR_FILENO);
        close(stdout_fd);
        close(stderr_fd);
    }

    execvp(service->argv[0], service->argv);
    exit(127);
}

 

标签:到父,重定向,service,lock,pid,unlock,fd,mgmt,进程
From: https://www.cnblogs.com/god-of-death/p/18404071

相关文章

  • exit与_exit详解,并于进程间的关系
    文章目录1.`exit`函数定义语法参数特点示例2.`_exit`函数定义语法参数特点示例3.主要区别4.与进程间的关系进程的创建与终止示例结论1.exit函数定义exit是一个标准库函数,定义在<stdlib.h>头文件中。它用于正常或异常地终止程序,并执行一些清理操作。......
  • 秒懂:进程优先级
    1.概念    简单来说,进程优先级是对于资源访问顺序来说的,谁先访问资源,谁的优先级就高。   注意:这和权限概念不一样,权限是能不能访问。2.情景引入进程的运行,是在CPU上执行,每次执行只能执行CPU的一个时间片,会有多个进程在run_Queue运行队列上等待CPU。 不同的......
  • 网络属性及相关配置工具\shel脚本编程-进阶 \进程-系统性能和计划任务
    一、通过网络配置命令让主机上网1.查看网络接口信息:  -`ipa`或者`ifconfig`显示系统中所有网络接口的详细信息,包括IP地址、子网掩码、MAC地址等。2.配置IP地址、子网掩码、网关和DNS:  -IP地址:使用`ifconfig`或`ipaa`命令来设置IP地址。例如,`ifconfig......
  • ROS - 一个进程中创建多个ROS节点
    文章目录1、概述2、方法1:创建多个命名空间3、方法2:使用多线程4、方法3:节点间通信(分离进程)4、实际验证不可行方案1:两次调用ros::init1、概述在ROS(RobotOperatingSystem)中,每个进程通常只能通过ros::init初始化一个节点。ROS的设计是基于一个进程对应一......
  • Linux高效进程控制的实战技巧
    Linux高效进程控制的实战技巧Linux是一种开源的Unix-like操作系统内核,由林纳斯·托瓦兹(LinusTorvalds)于1991年首次发布。Linux以其稳定性、安全性和灵活性而著称,广泛应用于服务器、桌面、嵌入式系统等多个领域。在Linux系统编程中,进程管理是核心部分之一,它涉及到如何创建......
  • 进程间通信-进程池
    目录理解​完整代码 完善代码 回收子进程:​ 不回收子进程:子进程使用重定向优化理解#include<iostream>#include<unistd.h>#include<string>#include<vector>#include<sys/types.h>voidwork(intrfd){}//masterclassChannel{private:i......
  • shell脚本监控一个进程号,进程号没有就输出error
    你可以使用一个简单的Shell脚本来监控进程号(PID),如果进程不存在则输出error。以下是一个示例脚本:#!/bin/bash#输入要监控的进程号pid=$1#检查进程是否存在ifps-p$pid>/dev/nullthenecho"Process$pidisrunning."elseecho"error:Process$pid......
  • kswapd0进程占用cpu非常高
    早上,遇到一起故障,调查显示kswapd0进程的内存使用率很高,系统负载从平时的0.x升高到了260多。查到原因是,同事代码逻辑错误,不断的死循环向表里面添加数据,记录数达到了2.7千万。然后对该表altertableaddindexxxx,导致了mysqld内存不断的膨胀,导致需要使用到了swap分区的虚拟内存,然......
  • Linux中的进程优先级与设置方法
    在Linux系统中,进程优先级是影响进程调度的重要因素。进程优先级决定了操作系统在多任务环境中分配CPU时间的方式。以下是关于Linux中进程优先级的详细介绍及其设置方法。1.进程优先级概述优先级范围:Linux中的优先级通常使用一个值来表示,范围从0到139:实时优先级:范......
  • 什么是进程中断
    进程中断是指在操作系统中,当前正在执行的进程被暂时挂起或中止,以便处理某种特定事件或条件。这种机制允许操作系统在多个进程之间进行切换,确保系统能够响应外部事件或高优先级的任务。以下是对进程中断的详细解释:1.中断的类型硬件中断:由外部设备(如键盘、鼠标、网络适配器等)发......