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

linux下使用system函数在程序中运行linux的shell命令

一、功能
linux下在程序中调用shell命令实现某个功能,比如拷贝命令cp
二、使用
添加头文件 #include <stdlib.h>
函数原型 int system(const char *command);
描述说明是system的调用过程:
使用fork创建一个子进程,子进程使用 execl 执行 command 中指定的 shell 命令system函数在子进程命令执行完成后返回在命令执行过程中,SIGCHLD 将被阻塞,SIGINTSIGQUIT 将被忽略
由上面几点我们能够得到:
system是一个阻塞函数,使用system需等待命令执行结束后才会继续跑接下去的代码SIGCHLD 信号将被阻塞
本章的重点来了,为何要阻塞SIGCHLD 信号:
在Linux中fork的子进程结束后,内核会向其父进程发送SIGCHLD信号,即system函数的调用者,system源码中父进程是调用waitpid函数来为变成僵尸的子进程进行回收,获得其结束状态,然后将这个结束状态返回给system函数的调用者。
所以我们在调用system之前不能去注册SIGCHLD 信号的处理函数,如在信号处理函数中进行wait等操作,system函数中的 waitpid将可能获取不到子进程正确返回状态,因为子进程可能被信号处理函数抢先回收;

#include <stdlib.h>
#include <stdio.h>
#include <signal.h>typedef void (*sighandler_t)(int);
int os_system(const char *cmd)
{int ret = 0;sighandler_t old_handler;old_handler = signal(SIGCHLD, SIG_DFL);ret = system(cmd);signal(SIGCHLD, old_handler);return ret;
}
int main(int argc, char *argv[]) 
{char cmd[128] = "mkdir -p /data/param";int ret = os_system(cmd);if(ret == -1)printf("mkdir erro");elseprintf("mkdir success");
}

old_handler =signal(SIGCHLD, SIG_DFL); 在调用system前将SIGCHLD信号的处理函数注册为SIG_DFL,在Linux 中SIG_DFL的作用就是忽略的意思;
signal(SIGCHLD, old_handler);在调用完后将 SIGCHLD的处理函数恢复成调用前的处理函数。

相关文章:

linux下使用system函数在程序中运行linux的shell命令

一、功能 linux下在程序中调用shell命令实现某个功能&#xff0c;比如拷贝命令cp 二、使用 添加头文件 #include <stdlib.h> 函数原型 int system(const char *command); 描述说明是system的调用过程&#xff1a; 使用fork创建一个子进程&#xff0c;子进程使用 execl 执…...

银行数字化转型导师坚鹏:银行业发展趋势及对人才的需求分析

数字化转型背景下银行业发展趋势及对人才的需求分析 ——洞察先机&#xff0c;重塑人才核心竞争力 课程背景&#xff1a; 数字化转型背景下&#xff0c;很多银行存在以下问题&#xff1a;不知道银行整体发展现状与发展趋势&#xff1f;不清楚金融科技对银行发展有什么影响&…...

NFS挂载

0、创建 mkdir /nfsdata mkfs.xfs /dev/vdb mount /dev/vdb /nfsdata 1、两边主机启动nfs服务 service nfs start 2、被挂载主机查看&#xff0c;文件系统是否可挂载 showmount -e 3、将被挂载主机&#xff0c;设置任何主机可挂载文件系统 vi /etc/exports /nfsdata (in…...

IDEA使用技巧

IntelliJ IDEA是一款流行的Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;它为开发者提供了许多有用的功能和工具来提高他们的工作效率和开发质量。直接使用IntelliJ IDEA就相当于节省了自己的时间&#xff0c;如果先使用其他编译器后来在使用IntelliJ IDEA会觉得非…...

自动化测试之一【接口测试总结】

本文主要分为两个部分&#xff1a;第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f;第二部分&#xff1a;…...

科大奥瑞物理实验——傅里叶光学

实验名称&#xff1a;傅里叶光学 1. 实验目的&#xff1a; 加深对傅里叶光学中的一些基本概念和基本理论的理解&#xff0c;如空间频率空间频谱和空间滤波和卷积等。通过实验验证阿贝成像理论&#xff0c;理解透镜成像的物理过程&#xff0c;进而掌握光学信息处理实质。通过阿…...

mysql count(*)的性能如何?

文章目录 为什么会出现这种情况呢?如何优化count(*)性能?增加redis缓存加二级缓存多线程执行减少join的表改成ClickHousecount的各种用法性能对比为什么会出现这种情况呢? 在Mysql中,count(*)的作用是统计表中记录的总行数。 而count()的性能跟存储引擎有直接关系,并非所…...

gan实战(基础GAN、DCGAN)

一、基础Gan 1.1 参数 &#xff08;1&#xff09;输入&#xff1a;会被放缩到6464 &#xff08;2&#xff09;输出&#xff1a;6464 &#xff08;3&#xff09;数据集&#xff1a;https://pan.baidu.com/s/1RY1e9suUlk5FLYF5z7DfAw 提取码&#xff1a;8n89 1.2 实现 import t…...

使用C语言实现服务器/客户端的TCP通信

本文力求使用简单的描述说明一个服务器/客户端TCP通信的基本程序框架,文中给出了服务器端和客户端的实例源程序,本文的程序在ubuntu 20.04中编译运行成功,gcc版本号为:9.4.0 1. 前言 当两台主机间需要通信时,TCP和UDP是两种最常用的传输层协议,TCP是一种面向连接的传输协…...

AI模型训练推理一定要知道的事情

AI训练的算力要求 算力 模型训练需要大量计算资源&#xff0c;包括CPU( Central Processing Unit)、GPU(Graphical Processing Unit)、TPU(Tensor Processing Unit)等&#xff0c;其中GPU是最为常见的硬件加速器。另外还可以通过算法优化提高模型训练效率。例如分布式训练技术…...

SPSS27破解安装后,出现应用程序无法正常启动(0xc000007b)

破解完SPSS 27软件后&#xff0c;点击图标出现下图错误 可以尝试以下方法&#xff1a; 1. 在安装目录下找到VC开头的文件夹 2. 点击此软件进行修复 若修复完成&#xff0c;重新启动SPSS软件即可。 3. 若提示错误&#xff0c;显示如下界面&#xff0c;进行下面的方法j 4. 下…...

央企程序员写了重大bug,会造成用户个人信息泄露,领导已经知道了,需要赶紧跑路吗?...

开发过程中出现bug是很正常的事情&#xff0c;小bug无关紧要&#xff0c;可如果是重大bug该怎么办&#xff1f;一位央企程序员就陷入了这样的困境&#xff1a;因为自己没有考虑周全&#xff0c;不小心写了个重大bug&#xff0c;会造成用户个人信息泄露&#xff08;用爬虫可以攻…...

day14—选择题

文章目录1.定义学生、教师和课程的关系模式 S (S#,Sn,Sd,Dc,SA &#xff09;&#xff08;其属性分别为学号、姓名、所在系、所在系的系主任、年龄&#xff09;&#xff1b; C &#xff08; C#,Cn,P# &#xff09;&#xff08;其属性分别为课程号、课程名、先修课&#xff09;&a…...

翻转链表(力扣刷题)

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&#xff1a; 输入…...

JavaEE——锁相关

在开发过程中&#xff0c;如果需要开发者自主实现一把锁&#xff0c;就必须了解锁策略和锁的实现原理。 目录 锁策略 乐观锁和悲观锁 互斥锁和读写锁 轻量级锁和重量级锁 自旋锁和挂起等待锁 公平锁和非公平锁 可重入锁和不可重入锁 死锁 发生死锁的必要条件 synchr…...

C语言指针与数组 进阶

本章主要是补充 指针和数组方面的指示&#xff0c;把前面指针的知识补充下。参考前面的C语言基础—指针 C语言指针与数组 进阶用一级指针访问二维数组❗易错点: 不能直接指针变量数组名指向数组的指针1. 指向指针的指针2. 指向一维数组的指针 (*P)[4]—行指针二维数组名指针数组…...

Java连接SqlServer错误

Java连接SqlServer错误 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目…...

Elastic 可观察性 - 适用于当今 “永远在线” 世界的解决方案

作者&#xff1a;Bahubali Shetti 当今世界&#xff0c;我们的生活很大程度上由应用程序控制。 无论是用于商业用途还是个人用途&#xff0c;我们都希望这些应用程序 “始终在线” 并能够立即做出响应。 这些高期望对开发人员和运营人员提出了巨大的要求。 管理这些应用程序需…...

Temu病毒式营销,如何在大红利时期快人一步?

从去年9月开始&#xff0c;拼多多推出海外版Temu&#xff0c;大手笔烧钱买量、大手笔补贴消费者&#xff0c;通过令人难以置信的超低价&#xff08;比如一件卫衣2.44美元&#xff0c;且包邮&#xff09;&#xff0c;在北美市场迅速打开局面&#xff0c;并引发海外网友“人传人”…...

ChatGPT使用案例之写代码

ChatGPT使用案例之写代码 可以对于许多开发者而言又惊又喜的是我们可以使用ChatGPT 去帮我们完成一些代码&#xff0c;或者是测试用例的编写&#xff0c;但是正如我们提到的又惊又喜&#xff0c;可能开心的是可以解放一部分劳动力&#xff0c;将自己的精力从繁琐无聊的一些任务…...

如何选择ComfyUI-FramePackWrapper的模型加载方案?从技术选型到场景适配全解析

如何选择ComfyUI-FramePackWrapper的模型加载方案&#xff1f;从技术选型到场景适配全解析 【免费下载链接】ComfyUI-FramePackWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-FramePackWrapper 在AI视频生成工作流中&#xff0c;模型加载是影响效率与稳…...

告别官方文档!用IntelliJ IDEA 2023.3 + Flutter 3.19 搭建环境,我踩过的坑你别再踩了

告别官方文档&#xff01;用IntelliJ IDEA 2023.3 Flutter 3.19 搭建环境&#xff0c;我踩过的坑你别再踩了 如果你正在寻找一份真正实用的Flutter环境搭建指南&#xff0c;那么你来对地方了。作为一个刚从官方文档和无数博客教程中"幸存"下来的开发者&#xff0c;我…...

Kandinsky-5.0-I2V-Lite-5s Web工具深度解析:非聊天页,专注图生视频的生产级界面

Kandinsky-5.0-I2V-Lite-5s Web工具深度解析&#xff1a;非聊天页&#xff0c;专注图生视频的生产级界面 1. 工具概述 Kandinsky-5.0-I2V-Lite-5s是一款专为图生视频任务设计的轻量级AI模型&#xff0c;它通过简洁直观的Web界面&#xff0c;让用户能够快速将静态图片转化为动…...

MySQL数据库基础聚合函数

聚合函数...

实战react项目:基于快马ai快速构建包含图表与导航的用户数据仪表盘

最近在做一个用户数据仪表盘项目&#xff0c;正好用React配合Ant Design实现了一套完整的界面。这种包含导航、图表和动态数据的页面在后台系统中很常见&#xff0c;记录下我的实现思路和踩坑经验。 项目结构规划 首先用create-react-app初始化项目&#xff0c;然后按功能模块…...

AI辅助开发智能车:让快马平台优化你的图像处理与识别算法

最近在准备智能车竞赛&#xff0c;遇到了一个头疼的问题&#xff1a;摄像头采集的图像受环境光影响太大&#xff0c;导致巡线识别不稳定。特别是在弯道和阴影区域&#xff0c;传统固定阈值的二值化方法完全失效。经过反复尝试&#xff0c;发现用InsCode(快马)平台的AI辅助开发功…...

EVA-02模型辅助软件测试:自动化生成测试用例与边界条件描述

EVA-02模型辅助软件测试&#xff1a;自动化生成测试用例与边界条件描述 如果你是一名软件测试工程师&#xff0c;下面这个场景你一定不陌生&#xff1a;产品经理递过来一份几十页的需求文档&#xff0c;你需要在几天内&#xff0c;把它拆解成成百上千条逻辑清晰、覆盖全面的测…...

AAC编码详解

嵌入式音视频开发——AAC编码 1. AAC 编码概述 在嵌入式音视频开发中&#xff0c;AAC&#xff08;Advanced Audio Coding&#xff0c;高级音频编码&#xff09;是一种非常常见的有损音频压缩技术&#xff0c;广泛应用于手机、机顶盒、车机、智能摄像头、会议终端、对讲设备以及…...

springboot+vue基于web的电脑配件商城的设计系统

目录 同行可拿货,招校园代理 ,本人源头供货商系统功能模块划分技术架构设计要点特色功能实现路径安全防护措施扩展性考虑 项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 同行可拿货,招校园代理 ,本人源头供货商 系统功能模块…...

从v4l2-ctl命令到media拓扑:手把手教你调试RK3568上的OV8858摄像头图像

RK3568平台OV8858摄像头深度调试实战&#xff1a;从硬件链路到图像优化的全流程解析 当你在RK3568平台上调试OV8858摄像头时&#xff0c;是否遇到过这样的场景&#xff1a;设备树配置看似正确&#xff0c;但摄像头输出的图像却出现花屏、颜色异常或干脆没有信号&#xff1f;作为…...