06 2009 档案

摘要:第12章 POSIX线程在第11章,我们看到在Linux中进程是如何被处理的。这些多进程的特性很久以来就是类Unix操作系统的特性。有时使用fork创建一个新进程的代价实在是太大了。在这种情况下,使得一个程序同时做两件事情,或者至少看起来是如此是十分有用的。相对应的,我们也许希望以同样的方式同时发生两个或是更多的事情。这就是线程开始的地方。在这一章,我们将会了解:在一个进程内创建一个线程在一个进程的多个线程之间同步数据修改一个线程的属性在同一个进程中由一个线程控制另一个什么是线程一个程序内的多个执行线路被称之为线程。更为精确的定义是线程是一个进程内的控制队列。到目前为止我们所看到的所有程序都是 阅读全文
posted @ 2009-06-21 20:46 jlins 阅读(165) 评论(0) 推荐(0) 编辑
摘要:健壮的信号接口我们已经讨论了使用signal来发出与捕获信号,因为他们在较为旧的Unix程序中很常见。然而,X/Open与Unix规范推荐了一个更为健壮的用于信号处理的新的编程接口:sigaction。#include <signal.h>int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);sigaction结构定义在signal.h中,这个结构用于定义依据由sig所指定的信号而所要采取的动作,而且这个结构至少有以下几个成员:void (*) (int) sa_handler /* 阅读全文
posted @ 2009-06-13 10:45 jlins 阅读(179) 评论(0) 推荐(0) 编辑
摘要:线程Linux进程可以协作,可以发送消息,也可以中断另一个进程。他们甚至可以在彼此之间共享内存段,但是在操作系统内部他们却是完全不同的实体。他们并不能共享变量。在许多Unix系统与Linux系统还有另一类名为线程的进程。线程在某些程序中具有巨大的价值,例如多线程数据库服务器,然而线程很难进行编程。Linux上的线程编程并不如使用多进程那样常见,因为Linux的进程是轻量级的,而且多个协作进程的编程要比线程编程容易得多。我们会在第12章讨论线程。信号信号是由Unix与Linux系统响应某些条件,依据哪一个进程按顺序执行某些动作而产生的事件。我们使用术语"raise"来表示一个 阅读全文
posted @ 2009-06-10 18:38 jlins 阅读(210) 评论(0) 推荐(0) 编辑
摘要:等待一个进程当我们使用fork启动一个子进程时,他具有其自己的生命周期并且独立运行。有时,我们希望知道一个子进程何时结束。例如,在前一个例子中,父进程在子进程之前结束,从而我们得到混乱的输出,因为子进程还在继续运行。我们可以通过调用wait来使得父进程在继续运行之前等待,直到子进程结束。#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *stat_loc);wait系统调用暂停父进程,直到他的一个子进程结束。这个函数调用返回其子进程的PID。这通常是一个已经结束的子进程。状态信息使得父进程可以确定子进程的 阅读全文
posted @ 2009-06-08 18:49 jlins 阅读(139) 评论(0) 推荐(0) 编辑
摘要:进程调度ps输出的一个特点就是ps命令实体本身:1357 pts/2 R 0:00 ps -ax这表明进程1357处于运行状态(R)并且正在执行命令ps -ax。所以进程是在其自身的输出中被描述的。状态指示器只是表明程序已经准备好运行,并不一定是在实际运行。在单处理器的计算机上,每次只能运行一个进程,而其他的进程必须依次等待。这些轮序,就是所谓的时间片,非常短,从而给我们一种感觉,所有的程序是在同时运行的。状态R只是表示程序并没有等待其他的进程完成或是等待输入或输出来结束。这就是为什么我们会在ps输出中看到两个这样的进程。(另一个通常会看到的标识为运行的进程就是X显示服务器)Linux内核使用 阅读全文
posted @ 2009-06-07 12:21 jlins 阅读(217) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示