一、进程与信号的进程链与进程扇

#include <unistd.h>#include <stdlib.h>

#include <stdio.h>
#include <fcntl.h>
#include <string.h>

int main(int argc,char *argv[])
{
    pid_t pid;
    int counter;
    if(argc<2)
    {
        printf("usage: %s number\n",argv[1]);
        exit(1);
    }
    counter=atoi(argv[1]);
    if(counter<2)
    {
        counter =2;
    }
    int i=1;
    for(;i<counter;i++)
    {
        pid=fork();
        if(pid<0)
        {
            printf("fork error");
            exit(1);
        }
        else if (pid >0)
        {
            break;
        }

    }
    printf("progress pid: %d,ppid: %d\n",getpid(),getppid());
    while(1)   {//阻塞    sleep(1);   }     close(pid);
}

编译执行

ps -ef |grep fork_link |pstree

bash───fork_link───fork_link───fork_link───fork_link

子进程的链式结构

子进程扇式结构

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>

int main(int argc,char *argv[])
{
    int counter=0;
    if(argc <2)
    {
        printf("usage: %s number\n",argv[1]);
        exit(1);
    }
    counter=atoi(argv[1]);
    if(counter<2)
    {
        counter=2;
    }
    pid_t pid;
    int i=1;
    for(;i<=counter;i++)
    {
        pid=fork();
        if(pid<0)
        {
            printf("fork error");
            exit(1);
        }
        else if(pid == 0)
        {
            //子进程退出,只留父进程,形成扇形
            break;
        }

    }

    printf("process pid: %d ppid: %d\n",getpid(),getppid());

    while(1)
    {
        //阻塞
        sleep(2);
    }
    close(pid);
}

编译运行

./fork_fan 5

pstree 

bash───fork_fan───5*[fork_fan]
时间: 2024-10-06 10:01:34

一、进程与信号的进程链与进程扇的相关文章

第9章 进程和信号(一)

本文目录: 9.1 进程的简单说明 9.11 进程和程序的区别 9.12 多任务和cpu时间片 9.13 父子进程及创建进程的方式 9.14 进程的状态 9.15 举例分析进程状态转换过程 9.16 进程结构和子shell 9.2 job任务 9.3 终端和进程的关系 9.4 信号 9.41 需知道的信号 9.42 SIGHUP 9.43 僵尸进程和SIGCHLD 9.44 手动发送信号(kill命令) 9.45 pkill和killall 9.5 fuser和lsof 9.1 进程简单说明 进

Linux简单程序实例(GNU工具链,进程,线程,无名管道pipe,基于fd的文件操作,信号,scoket)

一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o test.i 编译:   不同平台使用汇编语言不同,汇编将高级语言编译成汇编语言: gcc -S test.c -o test.s 汇编:   将汇编语言翻译成二进制代码: gcc -c test.c -o test.o 链接:   包含各函数库的入口,得到可执行文件: gcc -o test test.c (2

第7章 进程关系(2)_进程链和进程扇

2. 进程链和进程扇 (1)创建进程链 ①进程链:就是父进程创建一个子进程,创建的子进程再次创建出属于自己的子进程,这样依次往下循环,如下图所示. ②关键实现:判断出如果是父进程则退出,保证父进程只会创建一个子进程.如果是子进程继续创建接下来的进程再退出. [编程实验]构建进程链 //process_link.c #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(int argc, c

一、进程与信号之信号的概念

信号:进程与进程之间通讯机制 信号是软件中断 信号是异步事件 信号来源:内核产生,常用信号kill(),raise(),alarm(),settimer()等 kill -l 查看linux所有 信号共64个 1-31 非实时信号发送信号可能回丢失,不支持信号排队 32-64实时信号 进程处理信号: 忽略信号 SIGKILL和SIGSTOP永远不能被忽略 忽略硬件异常 进程启动时SIGUSER1和SIGUSER2两个信号被忽略 执行默认操作 每个信号都有默认动作,大部分信号动作是终止信号 捕获信

2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

 1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默认Term动作 a signal handling function 进程处理信号 A默认处理动作 term   中断 core    core(调试的时候产生) gcc –g file.c ulimit –c 1024 gdb a.out core ign      忽略 stop     停止

Android -- Init进程对信号的处理流程

Android -- Init进程对信号的处理流程 在Android中,当一个进程退出(exit())时,会向它的父进程发送一个SIGCHLD信号.父进程收到该信号后,会释放分配给该子进程的系统资源:并且父进程需要调用wait()或waitpid()等待子进程结束.如果父进程没有做这种处理,且父进程初始化时也没有调用signal(SIGCHLD, SIG_IGN)来显示忽略对SIGCHLD的处理,这时子进程将一直保持当前的退出状态,不会完全退出.这样的子进程不能被调度,所做的只是在进程列表中占据

我使用过的Linux命令之kill - 终止进程/发送信号

用途说明 kill命令用于终止指定的进程(terminate a process),是Unix/Linux下进程管理的常用命令.通常,我们在需要终止某个或某些进程时,先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程.kill命令的另外一个用途就是向指定的进程或进程组发送信号(The  command kill sends the specified signal to the specified process or process group)

进程和信号

前言 没深入研究进程和信号,只是本人一个粗虐的理解. 什么是进程? 1.当程序未被解析器运行时,只是一个静态的文件或数据流. 2.程序被解析器运行时,就产生了进程,进程代表当前程序运行时的一个状态. 父子进程 1.进程好比现实生活中的人,也有父子关系. 2.子进程会继承父进程,但子进程是独立的. 3.如果父进程死了,子进程会成孤儿,但儿子并不孤独,还有天地嘛. 4.有的人活着但死了,现实中叫僵尸,计算机里叫僵尸进程 信号 1.我们知道进程和进程是独立的,进程之间通信必须通过某方式进行交流.我们事

Linux 命令 - killall: 通过进程名向进程发送信号

命令格式 killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME... killall -l, --list killall -V, --version 命令参数 -e, --exact 对于长名字,要求精确匹配.如果一个命令名的长度超过 15 字符,则可能不会用完整的名字.这种情况下,killall 会杀死名字匹配前 15 个字符的进程.使用 -e 选项,则会要求进程名字完全匹配. -I, --ignore-case 匹配进程

linux程序设计——进程和信号总结(第十一章)

11.4.2    信号集 头文件signal.h定义了类型sigset_t和用来处理信号集的函数.sigaction和其他函数.sigaction和其他函数将用这些信号集来修改进程在接收到信号时的行为. #include <signal.h> int sigaddset(sigset_t *set, int signo); int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigdelset(sigset_t