Linux环境编程--waitpid与fork与execlp
waitpid
表头文件
#include<sys/types.h>
#include<sys/wait.h>
定义函数 pid_t waitpid(pid_t pid,int * status,int options);
函数说明
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程
结束。如果在调用 wait()时子进程已经结束,则 wait()会立即
返回子进程结束状态值。 子进程的结束状态值会由参数 status 返回,
而子进程的进程识别码也会一起返回。如果不在意结束状态值,则
参数 status 可以设成 NULL。参数 pid 为欲等待的子进程识别码,
其他数值意义如下:
pid<-1 等待进程组识别码为 pid 绝对值的任何子进程。
pid=-1 等待任何子进程,相当于 wait()。
pid=0 等待进程组识别码与目前进程相同的任何子进程。
pid>0 等待任何子进程识别码为 pid 的子进程。
参数 option 可以为 0 或下面的 OR 组合:
WNOHANG 如果没有任何已经结束的子进程则马上返回, 不予以等待。
WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。
子进程的结束状态返回后存于 status,底下有几个宏可判别结束情况:
WIFEXITED(status)如果子进程正常结束则为非 0 值。
WEXITSTATUS(status)取得子进程 exit()返回的结束代码,一般会先用 WIFEXITED 来判断是否正常结束才能使用此宏。
WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真
WTERMSIG(status) 取得子进程因信号而中止的信号代码,一般会先用 WIFSIGNALED 来判断后才使用此宏。
WIFSTOPPED(status) 如果子进程处于暂停执行情况则此宏值为真。一般只有使用 WUNTRACED 时才会有此情况。
WSTOPSIG(status) 取得引发子进程暂停的信号代码,一般会先用 WIFSTOPPED 来判断后才使用此宏。
如果执行成功则返回子进程识别码(PID) ,如果有错误发生则返回
返回值-1。失败原因存于 errno 中。
/******
* waitpid.c - Simple wait usage
*********/
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
pid_t childpid;
int status;
childpid = fork();
if ( -1 == childpid )
{
perror( "fork()" );
exit( EXIT_FAILURE );
}
else if ( 0 == childpid )
{
puts( "In child process" );
sleep( 3 );//让子进程睡眠3秒,看看父进程的行为
printf("\tchild pid = %d\n", getpid());
printf("\tchild ppid = %d\n", getppid());
exit(EXIT_SUCCESS);
}
else
{
waitpid( childpid, &status, 0 );
puts( "in parent" );
printf( "\tparent pid = %d\n", getpid() );
printf( "\tparent ppid = %d\n", getppid() );
printf( "\tchild process exited with status %d \n", status );
}
exit(EXIT_SUCCESS);
}
[root@localhost src]# gcc waitpid.c
[root@localhost src]# ./a.out
In child process
child pid = 4469
child ppid = 4468
in parent
parent pid = 4468
parent ppid = 4379
child process exited with status 0
[root@localhost src]#
如果将上面“waitpid( childpid, &status, 0 );”行注释掉,程序执行效果如下:
[root@localhost src]# ./a.out
In child process
in parent
parent pid = 4481
parent ppid = 4379
child process exited with status 1331234400
[root@localhost src]# child pid = 4482
child ppid = 1
子进程还没有退出,父进程已经退出了。
fork
头文件:
#include <unistd.h>
函数定义:
int fork( void );
返回值:
子进程中返回0,父进程中返回子进程ID,出错返回-1
函数说明:
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,它们之间共享的存储空间只有代码段。
示例代码:
#include <unistd.h>
#include <stdio.h>
int main(int argc, void ** argv )
{
int pid = fork();
if(pid < 0 ) {
// print("error!");
} else if( pid == 0 ) {
// print("This is the child process!");
} else {
// print("This is the parent process! child process id = %d", pid);
}
return 0;
}
execlp
相关函数:
fork,execl,execle,execv,execve,execvp
表头文件:
#include<unistd.h>
定义函数:
int execlp(const char * file,const char * arg,……);
函数说明:
execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
返回值:
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
错误代码 参考execve()。
范例:
/* 执行ls -al /etc/passwd execlp()会依PATH 变量中的/bin找到/bin/ls */
#include<unistd.h>
main()
{
execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
}
执行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
————————————————————————————————add by love_aiqiu
NAME
execl, execlp, execle, execv, execvp - execute a file
SYNOPSIS
#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[]);
相关文章:

C# 批处理制作静默安装程序包
使用批处理WinRAR制作静默安装程序包 echo 安装完窗口会自动关闭!!! echo off start /wait Lync.exe /Install /Silent start /wait vcredist_x86/vcredist_x86.exe /q /norestart start /wait DotNetFx40/dotNetFx40_Full_x86_x64.exe /q /…

程序员是复制粘贴的工具人?还是掌握“谜底”的魔术师?
作者 | David Heinemeier Hansson译者 | 弯月出品 | CSDN(ID:CSDNnews)编程世界在经历了“Imposter Syndrome(冒充者症候群/负担症候群)”和“gatekeeping(守门人理论)”两方的激战之后,最终以“…

Josephus Problem的详细算法及其Python, Java语言的实现
笔者昨天看电视,偶尔看到一集讲述古罗马人与犹太人的战争——马萨达战争,深为震撼,有兴趣的同学可以移步:http://finance.ifeng.com/a/20170627/15491157_0.shtml . 这不仅让笔者想起以前在学数据结构时碰到的Josephus问题&a…

SlightPHP
SlightPHP是一个轻量级的php框架,支持php5,和php模块方式使用,和apc使用性能更高!项目地址:http://code.google.com/p/slightphp/源码地址:http://slightphp.googlecode.com/svn/trunk/你有两种方法使用Sli…

bzoj1178
题目:http://www.lydsy.com/JudgeOnline/problem.php?id1178 看ppthttp://wenku.baidu.com/link?urldJv6LNme7syiLGM-TzbEEKXwx36JWEnI5HFrIlzfmzUXXg4HG8FDggj5WQS3EKL3k3p-sUYeJ268jCvN4t_kq2YPo3I4GXvaGulQjXrO3d7#include<cstdio> #include<cstdlib&…

编程能力差,学不好Python、AI、Java等技术,90%是输在了这点上!
据了解,超90%的人在学习Python、Java、AI等技术时,都是在网上随便找个入门的教程就开始学起来。然而多数人在看了不少教程后,还是很难独立完成项目,甚至反思自己为什么学了这么久编程能力还是这么差!因为你在刚刚开始学…

cglib代理的使用
一、什么是CGLIB? 总的来说,无论是cglib、jdk动态代理又或者是aop面向切面编程,都运用到了一个最重要的设计模式--代理模式!万变不离其终,学好代理模式,打遍天下无敌手! cglib就是一个字节码生成和转换的库…

使用PHP+Sphinx建立高效的站内搜索引擎
1. 为什么要使用Sphinx假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行)。2. Sphinx是什么Sphinx由俄…

9个必知的 Python 操作文件/文件夹方法
作者 | 欣一来源 | Python爱好者集中营近几年随着Python的热度不断上涨,人们渐渐使用这门编程语言来进行一些自动化操作,以节省重复劳动带来的效率低下,那么必定会涉及到对文件系统的操作,包括文件的增、删、改、查等等࿰…

Get/POST方法提交的长度限制
1. Get方法长度限制 Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。 如:IE对URL长度的限制是2083字节(2K35)。 下面就是对各种浏览器和服务器的…

Bitmap上下合成图片
合成两张图片,上下叠加的效果: /*** 把两个位图覆盖合成为一个位图,以底层位图的长宽为基准** param backBitmap 在底部的位图* param frontBitmap 盖在上面的位图* return*/public static Bitmap mergeBitmap(Bitmap backBitmap, Bitmap fr…

PHP 符号大全
注解符号: // 单行注解 /* */ 多行注解引号的使用’ ’ 单引号,没有任何意义,不经任何处理直接拿过来;" "双引号,php动态处理然后输出,一般用于变量.变量形态: 一种是True 即 真的;另一种是False 即假的常见变量形态: string 字串(数字\汉…

添加Net4CollectionTypeFactory的原因
.NET4.0已经实现了该功能 http://jahav.com/blog/nhibernate-using-net-4-iset/ NHibernate using .NET 4 ISet 0 CommentsNHibernate 4.0 (released in 2014-08-17) has brought us support for .NET 4 ISet<> collections, thus freeing us from the tyranny of the Ie…

LTSM 实现多元素时序数据植物健康预测
作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 引言: 近些年来,“预测”一词在各个领域被频繁提及,所谓预测,实际上就是根据历史规律,推测未来结果。在科学技术发展有限的过去࿰…

如何扩大以太坊的规模:分片简介(How to Scale Ethereum: Sharding Explained)
2019独角兽企业重金招聘Python工程师标准>>> 分片是提高区块链效率的一个主要流派。下面简单通俗的解释一下分片算法。 以太猫(Cryptokitties)堵塞了以太坊网络好几天,以太坊--世界上最大的,公开的区块链目前是无法扩容的,也众所周…

Xdebug的安装-(无错可执行版)
xdebug是一个开源的php调试器,以php模块的形式加载并被使用。可以用来跟踪,调试和分析PHP程序的运行状况. 这里以PHP5.2.13为例, 1.下载php_xdebug-2.1.0-5.2.dll文件, http://www.xdebug.org/download.php 选择:PHP 5.2 VC6 TS (32 bit) 选择…

云游戏、VR、AI,云计算给元宇宙提供了哪些想象力?
2021 最火的新概念,莫过于元宇宙。2021 年 10 月 29 日,Facebook 宣布改名 Meta;2021 年 11 月 1 日,“元宇宙第一股” Roblox 经过短暂调整,宣布重新上线。接下来关于元宇宙的线下 / 线上讨论如火如荼,…

sys.check_constraints
每个用作 CHECK 约束(sys.objects.type C)的对象都在表中占一行。 SELECT name FROM sys.check_constraints-- equal to SELECT o.name FROM sys.sysobjects oJOIN sys.sysconstraints s ON o.parent_obj s.id WHERE o.xtype C GROUP BY o.…

什么是Bootstrap Aggregating
简介 Bootstrap Aggregating也叫作bagging,是一种机器学习领域用来做模型合并的一种算法。这种算法可以提高统计分类器和回归器的稳定性和准确度。同时也可以帮助模型避免过拟合。历史Bootstrap Aggregating最早在1994年由Leo Breiman提出,当时用来通过随…

柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)...
二、Work Queues(using the Java Client) 走起 在第上一个教程中我们写程序从一个命名队列发送和接收消息。在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工作者(worker)之间。 背后的主要思想工作队列(又名:任务队列)是为了避…

图像分析用 OpenCV 与 Skimage,哪一个更好?
作者 | 小白来源 | 小白学视觉这两种算法在它们可以检测到的和不能检测到的方面都有其起伏。OpenCV 是用 C 在后端进行编程的,并作为一个机器学习包,来分析 Python 中的图像模式。Skimage 也称为 Scikit-Image ,是一个机器学习软件包…

NetBeans配置Xdebug
这篇文章已经更新,看 Windows环境配置xdebug调试PHP Windows环境 或者 NetBeans配置Xdebug 远程调试PHP Linux环境nebeans配置xdebug可以方便我们逐步的查看程序的运行情况对我们调试程序是非常有利的下面我就来介绍下配置的过程。先要安装xdebug,可以参…

[译] Don’t call me, I’ll call you:使用 Redux-Saga 管理 React 应用中的异步 action (上)...
原文地址:Don’t call me, I’ll call you: Side effects management with Redux-Saga (Part 1)原文作者:David Dvora译文出自:掘金翻译计划本文永久链接:github.com/xitu/gold-m…译者:jonjia校对者:smile…

CentOS下安装NetBeans集成开发环境
下载NetBeans以netbeans-7.0beta2-ml-javaee-linux.sh为例#sh netbeans-7.0beta2-ml-javaee-linux.sh之后进入安装界面(接下来和windows下几乎一样不在举例) 前提是要安装了Java 主要不要在本地远程用SecureCRT输入命令啊,要在Linux下用终端输…
我的Android进阶之旅------Android嵌入图像InsetDrawable的用法
面试题:为一个充满整个屏幕的LinearLayout布局指定背景图,是否可以让背景图不充满屏幕?请用代码描述实现过程。 解决此题,可以使用嵌入(Inset)图像资源来指定图像,然后像使用普通图像资源一样使用嵌入图像资源。 语法如…

沉痛悼念游戏开发大神毛星云
惟愿所有的“爆料”都是造谣,惟愿我们能够一起去创造并让大家都能玩到蕴藏着中国上下五千年本土文化的优质游戏大作,惟愿我们能等到你的好消息......让人难过的是,据银柿财经报道,针对近日“网传腾讯天美员工离世”的消息…

April Fools Contest 2018
这个比赛不正经,但是我可以一本正经的写代码啊 A. Quirky Quantifierstime limit per test2 secondsmemory limit per test64 megabytesinputstandard inputoutputstandard outputInputThe input contains a single integer a (10 ≤ a ≤ 999). OutputOutput 0…

如何查找僵尸进程并Kill之,杀不掉的要查看父进程并杀之
用ps和grep命令寻找僵尸进程#ps -A -ostat,ppid,pid,cmd | grep -e ^[Zz]命令注解:-A 参数列出所有进程-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命…

PHP计划任务:如何使用Linux的Crontab执行PHP脚本(转)
我们的PHP程序有时候需要定时执行,我们可以使用ignore_user_abort函数或是在页面放置js让用户帮我们实现。但这两种方法都不太可靠,不稳定。我们可以借助Linux的Crontab工具来稳定可靠地触发PHP执行任务。下面介绍Crontab的两种方法。一、在Crontab中使用…

OpenAI 开放 GPT-3 微调功能,让开发者笑开了花
出品 | AI科技大本营(ID:rgznai100) 近日,OpenAI宣布,允许用户创建自定义版的 GPT-3。 OpenAI 表示,开发人员可以使用微调来创建针对其应用程序和服务中的特定内容量身定制的 GPT-3 模型,从而在任务和工作…