linux 一个简单的进程创建例子

C例子:创建进程 该程序是我写的博客“一起talk C栗子吧(第七十八回:C语言实例--创建进程)”的配套程序,共享给大家使用 立即下载

初学linux 进程的一些相关东西,做个笔记

1 主程序

该程序创建十个子进程,这个子进程是自己写的另外一个程序,需要传参,主要考虑几个要点: 

->  不能产生僵尸进程(在主进程运行时间很长的情况下)

      在主进程一开始添加下面语句

         //child_end是在子进程结束时候,主进程要调用的函数,这个函数内部对子进程等待,销毁

        if(signal(SIGCHLD,child_end)==SIG_ERR)
                return 1;   

->   主进程调子进程怎么传参

  //exec函数族有很多,选execv示例,argv_execv中还可以再添加多个参数

   // char* argv_execv[]={"task","1","2","0",NULL};

 //第一个参数是可执行文件的全路径 

 execv("/home/ServerPush/Process/task",argv_execv)


主程序如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>

int flag=0;
void child_end(int signum)
{
        if(flag!=0)
             sleep(1);
        int child_status;
        int pid;
        flag=1;
        pid = wait(&child_status);
              printf("child:%d exit status: %d\n", pid, child_status);

         if(WIFEXITED(child_status)==0)
                printf("子进程非正常终止,子进程终止状态:%d\n",WIFEXITED(child_status));
        else
                printf("子进程正常终止,子进程终止状态:%d\n",WIFEXITED(child_status));
              flag=0;
}

int main()
{
        int child_pid;
        if(signal(SIGCHLD,child_end)==SIG_ERR)
                return 1;
        int i;
         //测试进程传参是否正确
        char* argv_execv[]={"task","1","2","0",NULL};
        for(i=0;i<10;i++)
        {
                child_pid=fork();
                if(child_pid==-1)
                {
                        printf("fork error\n");
                        return 2;
                }else if(child_pid==0)
                {
                        //printf("hello word %d \n",getpid());
                         printf("这是子进程 pid: %d\n",getpid());
                         if(execv("/home/ServerPush/Process/task",argv_execv) < 0 )
                                 perror("Error on execv");
                        exit(1);
                }
        }
        printf("in parent process %d\n",getpid());
        for(i=1;i<10;i++)
//      {
                sleep(1);
//      }
        return 0;
}


//子程序task.c

//该程序中打印出所有传入的参数

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

int main(int argc,char* argv[],char *envp[])
{
        printf("\n### ARGC ###\n%d\n", argc);
            printf("\n### ARGV ###\n");
            while(*argv)
            printf("%s\n", *(argv++));
            printf("\n### ENVP ###\n");
           // while(*envp)
           // printf("%s\n", *(envp++));
        exit(0);
            return 0;
}





fork的简单使用 在linux下通过代码来说明fork()创建的子进程与父进程之间的关系,以及他们之间独立运行的状态 立即下载

相关推荐

iOS 取证窍门:为什么要先从 Recovery 恢复模式开始?

未记录的 DFU 代表“设备固件升级”。与专为普通用户设计的恢复模式不同,DFU 模式从来都不是为公众设计的。Apple 知识库中的任何地方都没有关于 DFU 的文档。进入 DFU 的方法主要是通过按下、按住和释放按钮的复杂操作序列,并具有精确的时间限制。在多个步骤中的任何一个步骤中,如果时间错误,都会导致重新启动设备,而不是将其切换到 DFU。另外,设备屏幕上也没有 DFU 模式的指示。如果设备成功切换到 DFU,显示屏将保持黑色。即使对于专家来说,进入 DFU 模式也可能很困难。恢复模式是最容易解释的。

2302_82041293的博客 1198

【Linux】进程—创建进程

Linux进程——进程创建

weixin_61701822的博客 1984

ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command ‘[‘D:\\.espressif\\python_env\\idf5.4_py3.

ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command '['D:\\.espressif\\python_env\\idf5.4_py3.

773

操作系统-15-进程的创建

从这一节起,我们将详细讲解进程的一生。进程如人生,进程的一生同样包含三个阶段,创建,运行和终结,本节是进程三部曲的开篇:进程创建。 接下来,我们讲解关于进程创建的诸多问题。 进程是由谁创建的?在什么情况下创建的? 幸好这个问题不像鸡生蛋蛋生鸡那样,这个问题的答案相对简单,进程的创建者有两种: 1.操作系统可以创建新的进程 2.进程也可以创建新的进程 其中,进程的创建者被称为父进程,创建出的进程被称为子进程。 1,操作系统创建进程:初始化 作为计算机的Boss,最初的进程是由操作系统创建的,操作系统在初始化的

FairLikeSnow的博客 1万+

在 ABAP Cloud 中玩转 CL_ABAP_PARALLEL 并行处理:从原理到实战

ABAP并行处理框架CL_ABAP_PARALLEL解析 本文系统介绍了SAP ABAP环境中实现并行处理的CL_ABAP_PARALLEL框架。该框架通过封装异步RFC和对话进程,为开发者提供了面向对象的API,显著提升大批量数据处理的效率。 文章首先分析了ABAP环境需要并行处理的原因:传统的串行处理在面对百万级数据时效率低下。然后详细介绍了CL_ABAP_PARALLEL的设计思路,它是一个"小型线程池"式的同步并行框架,适用于批量计算场景。此外,文章重点讲解了控制并行任务的关键参

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 341

EtherCAT总线运动控制学习笔记(RXXW_Dor)

说到总线控制,就要说到报文、对象字典、PN通信我们大部分会说报文,EtherCAT通信我们常说对象字典,叫法不一样,但是原理基本一致,下面我们简单认识下上面是对象字典。

RXXW_Dor的博客 5434

window创建进程的一个简单例子

char szCmd[128] = { 0 }; TCHAR Cmd[128] = { 0 }; CharToTchar(szCmd, Cmd); STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = TRUE;

那年晴天的博客 1339

第二大脑的觉醒:一个寄生在代码里的小生命,如何悄无声息地接管我的工作流

所有记忆都存在本地。

步子哥的博客 1064

创建进程的例子

#include "stdafx.h"#include #include int main(int argc, char* argv[]){ char szCommandLine[]="cmd"; STARTUPINFO si={sizeof(si)};    PROCESS_INFORMATION pi; si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWind

sotjimmy的专栏 1222

渗透测试之哥斯拉实战

可以直接在这里使用meterpreter命令进行对服务端的控制。选择目标 - 添加,配置连接信息,之后测试连接成功!php的shell功能如图。先要进行数据库的配置信息。可以直接在这里打包全站。

大河之犬的博客 2490

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5749

linux几种创建进程的方法

在Linux中主要提供了fork、vfork、clone三个进程创建方法。  在linux源码中这三个调用的执行过程是执行fork(),vfork(),clone()时,通过一个系统调用表映射到sys_fork(),sys_vfork(),sys_clone(),再在这三个函数中去调用do_fork()去做具体的创建进程工作。  fork      fork创建一个进程时,子进程只是完全

7154

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

linux进程守护例子,Linux下守护进程的创建例子

Linux下守护进程的创建例子#include #include #include #include int g_count;void Exit(){printf("I will exit, press any key to continue...(g_count = %d)\n", g_count);exit(0);}int main(int argc, char* argv[]){struct...

weixin_28340315的博客 224

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux下守护进程的创建例子

#include #include #include #include int g_count;void Exit(){ printf("I will exit, press any key to continue...(g_count = %d)/n", g_count); exit(0);}int main(int argc, char* ar

wudizuijimo的专栏 1022

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux下的C语言开发 进程创建 延伸的几个例子

    在Linux下面,创建进程是一件十分有意思的事情。我们都知道,进程是操作系统下面享有资源的基本单位。那么,在linux下面应该怎么创建进程呢?其实非常简单,一个fork函数就可以搞定了。但是,我们需要清楚的是子进程与父进程之间除了代码是共享的之外,堆栈数据和全局数据均是独立的,主要是学习标准的H文件的包含。  linux下的C语言开发(创建进程) [cpp] view plain c...

weixin_34217711的博客 177

Linux进程管理之子进程的创建(fork函数)、子进程与线程的区别、fork函数的简单使用例子、子进程的典型应用场景、父进程等待子进程结束后自己再结束

fork()是 Linux 中用于创建新进程的系统调用。当一个进程调用fork()时,系统会创建一个与原进程几乎完全相同的子进程。新的子进程在有相关写操作时,会复制父进程的资源(即写时复制的概念)。父进程的PID和子进程的PID是不同的。父进程和子进程会从fork()调用的返回值处开始继续执行,但返回值在父进程和子进程中是不同的。

昊虹AI笔记 1446

Linux内核分析课程6_进程创建

Linux内核课第六周作业。本文在云课堂中实验楼完成。 唐国泽 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000一.fork()系统调用

Eijsan 789

Linux创建新进程

在Linux系统中,创建新进程涉及到两个系统调用API:分别是fork()和exec(). 首先,在当前进程中,调用fork()复制出自身的一个拷贝,此时主要涉及到内核中与进程上下文相关的数据复制操作,而用户代码和数据则采用写时复制技术共享同一份资源。当一个进程复制后,原进程称为父进程,新进程则称为子进程. 然后,在子进程用一个新进程镜像替代自身,即从磁盘中装入一个新程序,并作为当前的子进程运行.这可通过调用exec()函数簇中的一个函数来实现,exec()函数簇中的所有函数都完成同样的工作,所不同的是

wy912809861的博客 967

Fundamental | Linux进程创建

Linux进程创建和PID获取

KawhiLeo的博客 678

GDB调试fork+exec创建的子进程的方法

本文讲述的是Linux中,使用gdb调试通过fork+exec创建的子进程的方法。网上介绍gdb调试fork+exec创建的子进程的方法有不少,实际使用之后觉得,本文的方法操作起来较为简洁明了,也具有一定的实用性。因此,将该方法拿出来与大家一起进行探讨。

tuzhutuzhu的专栏 6894

linux fork创建新进程

man 2 fork 使用fork创建和当前进程一模一样的进程,叫子进程原来的进程叫父进程 pid_t fork(void); 无输入参数,执行成功后返回子进程pid给父进程,返回0 给子进程,当内存不够或者pid号用尽的时候执行失败,此时返回-1 一些提示点(来自man): * The child has its own unique process ID, and this PID does not match the ID of any existing process group (setp

m0_38053897的博客 179

linux c (3) 启动新进程-fork函数

fork函数用于创建新进程,而且有一个很有意思的特性需要注意。下面的例子来自《linux c软件工程师实用教程》一书: #include #include #include #include int main(){    pid_t result;    result=fork();    int rt;    if(result==-1) 

欢迎来到musique的blog 4213

Linux 守护进程创建

1. 守护进程: 是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。守护进程常常在系统启动时开始运行,在系统关闭时终止 2. 创建守护进程的步骤:   1)创建子进程,父进程退出fork();   2)在子进程中创建新会话 setsid();   3)改变当前目录为根目录chdir("/")...

weixin_34111790的博客 166

Linux守护进程

守护进程(daemon)是在后台运行且不与任何控制终端关联的进程。 与终端脱离有两个目的: 避免进程运行过程中将信息输出到终端 避免进程被终端产生的信息中断 创建守护进程前首先需要理解几个概念:进程组、会话、控制终端。 每个进程除了有一进程ID(PID)之外,还属于一个进程组。 进程组是一个或多个进程的集合,每个进程组有一个进程组ID。 每个进程组有一个组长进程(pro...

weixin_34090562的博客 213

linux不同进程共享一个端口,linux系统爷儿俩进程共享端口

当前位置:我的异常网» Linux/Unix»linux系统爷儿俩进程共享端口linux系统爷儿俩进程共享端口www.myexceptions.net网友分享于:2013-04-06浏览:7次linux系统父子进程共享端口nginx 就是使用了父子进程 共享端口,所以nginx快速这个也算一个原因#include #include #include #include #include ...

weixin_30077373的博客 482
上一篇: pthread_join/pthread_exit用法实例
下一篇: linux 程序里结束进程
yaotinging
博客等级 码龄18年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值