13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

$| = 1; # 自 动 刷 新# 预 联 接 的 子 进 程 代 码 与 客 户 端 句 柄 进 行 I/O$inpu t= ;print Client "output\n";# 或 者 STDOUT, 一 样 的 东 西open(STDIN, "&Client") or die "can't dup client: $!";# 运 行 计 算 器 , 就 当 一 个 例 子system("bc -l");# 或 者 任 何 你 喜 欢 的 东 西 , 只 要 它 不 会 逃 逸 出 shellprint "done\n";# 仍 然 是 给 客 户 端clase Client;exit;# 不 让 子 进 程 回 到 accept!}这 个 服 务 器 为 每 个 到 来 的 请 求 用 fork 克 隆 一 个 子 进 程 。 那 样 它 就 可 以 一 次 处 理 许 多 请 求—— 只 要 你 创 建 更 多 的 进 程 。( 你 可 能 想 限 制 这 些 数 目 。) 即 使 你 不 fork,listen 也 会 允许 最 多 有 SOMAXCONN ( 通 常 是 五 个 或 更 多 个 ) 挂 起 的 联 接 。 每 个 联 接 使 用 一 些 资 源 ,不 过 不 象 一 个 进 程 用 的 那 么 多 。 分 裂 出 的 服 务 器 进 程 必 须 仔 细 清 理 它 们 运 行 结 束 了 的 子 进 程( 在 Unix 语 言 里 叫 "zombies" 僵 死 进 程 ), 否 则 它 们 很 快 就 会 填 满 你 的 进 程 表 。 在 “ 信号 ” 一 节 里 的 讨 论 的 REAPER 代 码 会 为 你 做 这 些 事 情 , 或 者 你 可 以 赋 值 $SIG{CHLD} ='IGNORE'。在 运 行 其 他 命 令 之 前 , 我 们 把 标 准 输 入 和 输 出 ( 以 及 错 误 ) 联 接 到 客 户 端 联 接 中 。 这 样 任 何从 STDIN 读 取 输 入 并 且 写 出 到 STDOUT 的 命 令 都 可 以 与 远 端 的 机 器 交 谈 —— 如 果 没 有449

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!