`
duoerbasilu
  • 浏览: 1541706 次
文章分类
社区版块
存档分类
最新评论

linux进程管理详细解说

 
阅读更多

一) 创建进程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1. fork系统调用

fork调用创建一个新进程。新的进程或者说子进程是调用进程或者说父进程的副本。fork语法是:

#include <unistd.h>

pid_t fork(void);

如果fork执行成功,就向父进程返回子进程的PID,并向子进程返回0。这意味着你只调用fork一次,它也返回两次。

Fork创建的新进程是和父进程一样的副本,包括真实和有效UIDGID、进程组和会话ID、环境、资源限制、打开的文件以及共享内存段。

如下程序清单展示一个使用fork的简单示例程序。

/************************ child.c ***************************/

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

pid_t child;

if((child=fork())==-1)

{

perror("fork");

exit(EXIT_FAILURE);

}

else if(child==0)

{

puts("in child");

printf("/tchild pid = %d/n",getpid());

printf("/t child ppid = %d/n",getppid());

exit(EXIT_SUCCESS);

}

else

{

puts("in parent");

printf("/t parent pid = %d/n",getpid());

printf("/t parent ppid = %d/n",getppid());

}

exit(EXIT_SUCCESS);

}

执行命令编译该程序。这个程序的输出应该和下面类似:

$./child

in parent

in child

child pid = 14091

child ppid = 14090

parent pid = 14090

parent ppid = 1549

二)控制进程

1. 等待进程--------wait函数族

一旦你用fork创建一个子进程,为了收集新进程的退出状态并防止出现僵进程,父进程应该等待子进程结束。

使用waitwaitpid函数可以收集子进程的退出状态。它们的原形如下:

#include <sys/wait.h>

#include <sys/types.h>

pid_t wait(int *status);

pid_t waitpid(pid_t pid,int *status,int options);

status保存子进程的退出状态。Pid是等待进程的PID

Options规定wait调用的行为应该如何。它可以使WNOHANG,导致waitpid在没有子进程退出进程时立即返回,也可以是WUNTRACED,意味着它应该因为存在没有报告状态的进程而返回。你也可以对它们执行逻辑“或”(OR)操作,取得两种行为(也就是说,给options参数传送WHOHANG||WUNTRACED)。

1. 杀死进程

一个进程由于以下5个原因中的一个而终止。

。它的main函数调用了return

。它调用了exit

。它调用了_exit

。它调用了abort

。它被一个信号终止

3个理由是正常终止,而后2和则是非法正常终止。但是无论进程为何终止,最后都执行相同的内核代码、关闭打开的文件、释放内存资源,并且执行其他要求的清理工作。

exit函数

这个函数在<stdlib.h>中声明的原型如下:

int exitint status);

exit导致程序正常并且返回父进程的状态(status)。

_exit函数在<unistd.h>中声明。它立即终止调用它的进程。

使用abort函数

如果你需要异常地终止一个程序,可以使用abort函数。在Liux下,abort还可以让程序产生内存转储(core dump),这是大多数调式器用于分析程序崩溃时的文件。虽然任何打开的文件都被关闭了,但abort函数仍然是个粗暴的调用,应该作为最后的手段来使用,比如你碰到类似严重内存不足这样的错误,无法用程序的方法处理时再用。Abort也是一个标准库函数,它原型为

#include <stdlib.h>

void abort(void);

下面的程序显示了abort函数如何运行。

/*********************** abort.c ************************/

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

abort();

/*shouldnt get here*/

exit(EXIT_SUCCESS);

}

使用gcc编译这个程序,并如下执行:

$./abort

Aborted

Sulimit c unlimited

$./abort

Aborted(core dumped)

注意你的系统可能不能生成一个core文件。如果它没有生成core文件,则按照上面的示范运行来使用shell的命令ulimit

使用kill函数

一个进程能调用kill函数杀死另一个进程,它的原型如下:

#include <signal.h>

#include <sys/types.h>

int kill(pid_t pid,int sig);

pid指定了要杀死的进程,sig是要发送的信号,如:SIGTERMSIGKILL

三)其它

1. 睡眠函数

#include <stdlib.h>

int sleep(int sec);

sec指示要睡眠的时间()
分享到:
评论

相关推荐

    Linux进程管理详细解说

    ### Linux进程管理详细解说 #### 一、程序与进程 **1.1 进程分类** 进程根据不同的应用场景可以分为以下几类: - **交互进程**:由用户直接与计算机进行交互的进程,例如终端中运行的命令。 - **批处理进程**:...

    linux 最全最好的解说

    以下是基于标题“Linux 最全最好的解说”和描述“Linux 最全最好的解说,最具体的介绍,和最实用的工具”的详细解析。 ### Linux 内核与驱动程序开发 FreeElectrons是一家专注于Linux内核、驱动程序及嵌入式Linux...

    selinux中文手册和详细解说

    它通过精细的权限管理,为系统中的每个进程、文件和其他资源分配安全上下文,实现严格的权限划分,有效防止恶意攻击和权限滥用。 **SELinux中文手册** 提供了对这一复杂系统的详细解释,帮助用户理解和配置SELinux...

    韩老师Linux2021系列教程

    "韩顺平2021图解Linux课程【重磅升级】资料分享"压缩包文件包含了丰富的学习材料,旨在通过清晰的图解和详细的解说,让学习者能够更加直观地理解和应用Linux系统。 首先,Linux操作系统是基于Unix的操作系统,以其...

    计算机和软件程序各自是怎样跑起来的详细解说.rar

    下面将对这个主题进行详细的解说。 首先,我们从计算机的角度出发。计算机由硬件和软件两大部分组成。硬件包括中央处理器(CPU)、内存(RAM)、硬盘、显示器等。软件则包括操作系统、应用程序和其他各种系统软件。...

    linux-jiaocheng.rar_linux 系统_linux系统

    7. **进程管理**:了解ps、kill、nohup、top等命令,监控和控制系统的进程。 8. **网络配置**:设置网络接口,进行DNS解析,使用ping、traceroute等工具诊断网络问题。 9. **Shell脚本编程**:学习编写简单的Shell...

    Linux那些事儿系列

    1. **Linux内核概述**:Linux内核是开源操作系统的基础,负责管理硬件资源、进程调度、内存管理以及设备驱动等核心功能。它是整个系统的心脏,确保所有软件组件高效协同工作。 2. **进程管理**:Linux内核通过调度...

    linux文件系统结构

    下面将详细解说Linux文件系统中各个重要目录的作用和特点。 首先,根目录“/”下有若干个子目录,其中比较重要的目录包括/bin、/etc、/lost+found、/sbin、/var、/boot、/root、/home、/mnt、/tmp、/dev和/usr等。 ...

    详解Linux系统中的root权限控制.docx

    我们知道用户身份是通过 UID 来确认的,我们在 《用户(user)和用户组(group)配置文件详解》中的 UID 的解说中有谈到 UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名。 普通用户...

    linux网络编程.rar

    Linux通过线程、进程或者异步非阻塞I/O来实现并发。PPT可能包含这方面的内容,比如线程池和事件驱动编程模型。 8. **网络安全** 网络编程中的安全问题不容忽视,如数据加密、认证和防止拒绝服务攻击等。这部分可能...

    IMP_Linux 文件和目录的属性.pdf

    本文详细介绍了 Linux 文件和目录的基本属性,包括 inode、权限、链接、归属、时间戳等方面的内容,并提供了相应的命令和示例,帮助用户更好地理解和管理 Linux 文件系统。 #### 12. 后记 Linux 文件系统的管理和...

    Linux超级用户权限控制.pdf

    我们知道用户身份是通过 UID 来确认的,我们在 《用户(user)和用户组(group)配置文件详解》中的 UID 的解说中有谈到“UID 是确认用户权限的标识,用户登录系统所处的角色是通过 UID 来实现的,而非用户名;...

    以linux内核启动地址破解30008000由来之谜

    关于Linux  Linux是一类Unix计算机操作系统的统称。Linux操作系统的内核的名字也是...Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的

    DNSPod NDS解析服务器源码 运行于Linux

    4. 启动服务:运行服务器程序启动DNS服务,通常会有一个守护进程来管理。 5. 测试与监控:使用DNS工具(如dig、nslookup)进行测试,同时设置日志和监控系统以确保服务正常运行。 总的来说,DNSPod NDS解析服务器...

    android 常用类解说

    5. **Linux Kernel(Linux内核)**:作为整个系统的底层,Linux内核提供了内存管理、进程调度、网络栈、驱动模型等功能,为上层提供了稳定、高效的运行环境。 ### Android 的四大组件 Android平台中有四个主要的...

    ACPI_BIOS_TRAINING_C06.pdf

    整体来看,文档是对Linux中ACPI实现的一个详细技术解说,不仅涉及了ACPI的基本概念和架构,还深入到具体的内核数据结构、命名空间的管理,以及驱动程序和事件处理机制等技术细节。了解这些知识点对于深入学习Linux...

    操作系统课设(两道批处理系统的两极调度)

    代码的详细解说将指导学生如何将理论知识应用到实际编程中,包括如何与Linux内核的调度机制相比较,以及如何优化性能。 文件"3113006030林旭东操作系统课设"很可能是包含源代码和相关文档的压缩包。解压后,学生...

Global site tag (gtag.js) - Google Analytics