fork新建进程

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

int main()
{
  pid_t pid;                                  //记录fork()的返回值,用于区别父子进程
  char *Message;                              //用于记录输出信息
  int LoopVal;      //用于记录父子进程的循环次数
  int LoopVal1;      //用于循环
  int ExitCode;

printf("the new fork starting\n");
  pid=fork();                                        //新建子进程
  switch(pid)
    {
    case -1:      //建立进程错误       
     printf("creat new fork error!");
     exit(1);
    case 0:                                           //子进程
      Message = "This is in the child process";
      LoopVal = 7;
      ExitCode = 25;
      break;
    default:                                         //父进程
      Message = "This is in the parent process,waiting the child finished........";
      LoopVal = 5;
      ExitCode = 15;
      break;
    }
  for(LoopVal1=0;LoopVal1<LoopVal;LoopVal1++)
    {
      puts(Message);
      sleep(1);
    }
  if(pid!=0)         //父进程
    {
      int StateVal;
      pid_t ChildPid;
      ChildPid = wait(&StateVal);         //用StateVal记录状态信息,wait返回的是子进程退出时,子进程的进程id。
      printf("The child has finished with  the PID of %d\n",ChildPid);
      if(WIFEXITED(StateVal))             //如果子进程正常结束,它就取一个非零值
   {

    //宏WEXITSTATUS(StateVal)是如果子进程正常结束,该宏函数的值为0,否则为非零值,与WIFEXITED(StateVal)刚好相反。
       printf("the child process has exit with code %d\n",WEXITSTATUS(StateVal));

//如果WIFEXITED非零,它返回子进程的退出码
      }

else
          printf("the child has terminated abnormally\n");
    }                                                   //子进程非正常结束
    exit(ExitCode);
}

时间: 2024-12-28 05:24:08

fork新建进程的相关文章

使用脚本来监控新建进程及其父进程以及他们的命令行

如今,流氓软件越来越多,其中也包含很多的知名软件厂商也赫然在列,肆意弹框,广告,篡改首页及系统设置,这些操作都是在后台静默完成,操作的流氓技术手段层出不穷,在运维过程中出现的反复问题,通过肉眼或者一定的技术手段可能都无法捕获到最终是哪个进程发起的流氓行为.为此,通过一定的脚本编程手段来加以辅助可谓事半功倍.举一简单例子,某用户计算机卸载了各种流氓软件后,没一会儿又安装上了,那么是如何安装上的,下面的脚本会告诉你答案. 该功能一共有2个脚本,第一个是vbs主程序,用以实现监控,第二个是批处理,用以

fork创建进程使用

1.fork创建进程的使用 fork()返回值等于0时,表示创建子进程: fork()返回值大于0时,是主进程: #include<stdio.h> #include<stdlib.h> #include<sys/wait.h> #include<signal.h> void sig_handler(int signo) { printf("child process %d stop\n", signo); //wait(0); } vo

Linux系统基于fork()新进程的创建

作者:严哲璟 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 fork属于系统调用,而此系统调用创建一个子进程,由于其为系统调用,所以基本的用户态到内核态的切换,以及中断的处理,都与普通的系统调用一样,分为3个主要过程 1.调用fork这个API,然后软中断,进入内核态,堆栈切换到内核堆栈,保存用户态sp,cs:eip; 2.执行system_call,然后SAVE_ALL,根据ea

UNIX网络编程卷1 服务器程序设计范式1 并发服务器,为每个客户请求fork一个进程

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.传统并发服务器调用 fork 派生一个子进程来处理每个客户 2.传统并发服务器的问题在于为每个客户现场 fork 一个子进程比较耗费 CPU 时间. /* include serv01 */ #include "unp.h" int main(int argc, char **argv) { int listenfd, connfd; pid_t childpid; void

UNIX网络编程卷1 server程序设计范式1 并发server,为每一个客户请求fork一个进程

本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.传统并发server调用 fork 派生一个子进程来处理每一个客户 2.传统并发server的问题在于为每一个客户现场 fork 一个子进程比較耗费 CPU 时间. /* include serv01 */ #include "unp.h" int main(int argc, char **argv) { int listenfd, connfd; pid_t childp

linux中fork创建进程讲解(转)

大家知道Linux中创建子进程的一个很好的方法是函数调用fork,但是很多初学者对fork的理解上可能有点困难.我们举个例子来看看fork的用法吧. 大家用fork的时候记住fork是“分叉”的意思就很好理解了. 记得初学fork() 函数及遇到这个函数时,总是不能理解fork为什么会这样写,就会分成父子两个进程.    先看一下fork() 的经典模式 //--------------------------------------------------------beginint pid=

Python新建进程的方法

最近维护合成部门的nuke工具包,发现不少工具的使用方法都很个人化,没有说明文档.这也导致artist在使用工具的时候比较感性,调整参数的时候缺少前后逻辑,长此以往,artist会产生这种意识:只要最后调出来效果ok就行,至于怎么调,是个人的事.甚至不少artist会排斥这类工具包,认为不仅用起来很困难,作用也不明显. 任何工具在充分掌握其使用方法后都是事半功倍的,这点是毋庸置疑的,前思后想,决定为每个工具都写一份说明文档. 写完后在menu.py中通过os.system(path)方法即可打开

C#-訪问轰炸机,新建进程,结束进程...(ConsoleApp)---ShinePans

这个程序能够自己主动打开要打开的网址,而且自己主动结束进程,这样能够达到博文点击流量的添加 program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Tst { class Program { static void Main(string[] args) { for(int i=0;i<100

C#-访问轰炸机,新建进程,结束进程...(ConsoleApp)---ShinePans

各位先看一下下面的题目,看看能否给出答案以及真正了解原因. #include "stdio.h" #include "string.h" #include "malloc.h" void swap(int a,int b){ int temp; temp = a; a = b; b = temp; } int get_int(int a){ int i = 1 + a; return i; } char* get_memory0(){ char