易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux多进程相关内容

Linux多进程相关内容
版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2006/10/14/linux-multiprocess-info/以及本声明。
最近在用 perl 写一个Linux下的多进程守护进程,因此研究了一下Linux下的进程相关的知识。现将心得总结一下。主要是关于进程创建和回收。
fork
SIGCHLD信号和僵尸进程
利用 waitpid 回收僵尸进程
忽略 SIGCHLD 回收僵尸进程
fork
首先说说 fork
函数。这个函数用来创建一个进程,不过创建方法有些不太好理解。先看下面的程序
fork-test.pl。我是用perl写的,不过相同的功能也可以用 C 来完成。
#!/usr/bin/perl
#------------------------------------
# fork-test.pl
print "Program started, pid=$$.\n";
if ($child_pid = fork()) {
print "I'm parent, my pid=$$, child's pid=$child_pid.\n";
} else {
print "I'm child, pid=$$.\n";
}
运行之后显示下面的结果。
Program started, pid=8934.
I'm child, pid=8935.
I'm parent, my pid=8934, child's pid=8935.
为什么 I'm child 和 I'm parent 都会被显示?这是因为 fork 调用时,当前的进程会从 fork 的位置一分为二,fork
对两个进程的返回值不同。在父进程中 fork 返回子进程(即另一个进程)的进程id,而在子进程中 fork 返回 0。上例的执行过程如下图。
上例中执行到 Program started 时,只有一个进程 8934,而执行到 fork 时,进程分为两个,父进程为 8934,子进程为
8935。接下来父进程执行 if 分支,输入“I'm parent..”,而子进程执行 else 分支,输出 “I'm child”。
SIGCHLD信号和僵尸进程
首先说说什么是僵尸进程(zombie process)。我们知道 Linux
使用进程表来管理进程,每个进程都在进程表中占据一个位置。当我们用 fork
生成一个子进程,然后该子进程退出时,系统不会自动回收该子进程所占位置。此时虽然进程表中有这个子进程的信息,但实际上该子进程早已结束,于是这个进程就成了“僵尸进程”。
僵尸进程虽然不占用系统资源,但是它会浪费进程表的位置。如果僵尸进程太多,有可能会导致不能创建新进程。下面的例子 zombie-test.pl
演示了如何创建僵尸进程:
#!/usr/bin/perl
#------------------------------------
# zombie-test.pl
sub child {
print "I'm child, pid=$$.\n";
}
while (1) {
if (fork() == 0) {


相关文档:

Linux 下 Qt Creator 的安装使用

Qt 以其开源,免费,完全面向对象(很容易扩展),允许真正的组件编程以及可移植跨平台等诸多优势得到越来越多的开发人员的青睐。Qt
Creator 是 Nokia 官方推出的专门针对 Qt 开发的 IDE。本文详细介绍了 Linux 下 Qt Creator 的安装,并针对
Qt Creator 的使用举了一个 Hello World 级别的例子,希望对第一次接触 Qt Cre ......

OUI 25031 linux安装oracle

/etc/hosts一定要有严格的格式!!!
grid control 10.2.0.1.1安装注意事项
1.hostname
网络:
    尽量使用静态IP,/etc/hosts的文件格式很重要,不知道是个BUG还是要求就是那么严格。我一开始就是在这吃的亏,在precheck需求的时候忽略了/etc/hosts检查失败的错误,结果安装软件没问题,但配置的时候出错 ......

Linux 初接触

1. 装系统
我装的双系统,Windows 7 和 Fedora 12.
1)我的C盘有50GB,所以我先分了区,分成3个,1个30GB,1个15GB,剩下的一个区3GB。
2)先装Windows 7在30GB的分区。
     P:Sony的型号VGN-NR120E很变态,安装的时候必须要用最新补丁的安装盘才可以驱动到硬盘(导致不能装XP),可能是HDD ......

Linux中fork()如何实现父子进程不同的返回值

        网上关于fork()文章都说fork()来创建子进程,利用返回值的不同来执行不同的代吗段.但都没有说到如何实现不同的返回值.下面我将和你来说说这个问題:
        考虑如下代码:
        int &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号