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.

{local $SIG{INT} = 'IGNORE';... # 处 理 你 自 己 的 业 务 , 忽 略 所 有 的 信 号fn(); # 在 fn() 里 也 忽 略 信 号 !... # 这 里 也 忽 略 。} # 语 句 块 退 出 后 恢 复 原 来 的 $SIG{INT} 值 。fn();# 在 ( 假 设 的 ) fn() 里 没 有 忽 略 SIGINT16.1.1 给 进 程 组 发 信 号( 至 少 在 Unix 里 ,) 进 程 是 组 织 成 进 程 组 的 , 一 起 对 应 一 个 完 整 的 任 务 。 比 如 , 如 果 你运 行 了 单 个 shell 命 令 , 这 条 命 令 是 有 一 系 列 过 滤 器 命 令 组 成 , 相 互 之 间 用 管 道 传 递 数 据 ,这 些 进 程 ( 以 及 它 们 的 子 进 程 ) 都 属 于 同 一 个 进 程 组 。 该 进 程 组 有 一 个 数 字 对 应 这 个 进 程 组的 领 头 进 程 的 进 程 号 。 如 果 你 给 一 个 正 数 的 进 程 号 发 送 信 号 , 该 信 号 只 发 送 给 该 进 程 , 而 如果 你 给 一 个 负 数 进 程 号 发 送 信 号 , 那 么 该 信 号 将 发 送 给 对 应 的 进 程 组 的 所 有 进 程 , 该 进 程 组的 进 程 组 号 就 是 这 个 负 数 的 绝 对 值 , 也 就 是 该 进 程 组 领 头 进 程 的 进 程 号 。( 为 了 方 便 进 程 组领 头 进 程 , 进 程 组 ID 就 是 $$。)假 设 你 的 程 序 想 给 由 它 直 接 启 动 的 所 有 子 进 程 ( 以 及 由 那 些 子 进 程 启 动 的 孙 子 进 程 和 曾 孙 进程 等 ) 发 送 一 个 挂 起 信 号 。 实 现 这 个 目 的 的 方 法 是 : 你 的 程 序 首 先 调 用 setpgrp(0,0), 使自 己 成 为 新 的 进 程 组 的 领 头 进 程 , 这 样 任 何 它 创 建 的 进 程 都 将 成 为 新 进 程 组 的 一 部 分 。 不 管那 些 进 程 是 通 过 fork 手 工 启 动 的 还 是 通 过 管 道 open 打 开 的 或 是 用 system("cmd &")启 动 的 后 台 进 程 。 即 使 那 些 进 程 有 自 己 的 子 进 程 也 无 所 谓 , 只 要 你 给 你 的 整 个 进 程 组 发 送 挂起 信 号 , 那 么 就 会 把 它 们 都 找 出 来 ( 除 了 那 些 设 置 了 自 己 的 进 程 组 或 者 改 变 了 自 己 的 UID的 进 程 —— 它 们 对 你 的 信 号 有 外 交 豁 免 权 。){local $SIG{HUP} = 'IGNORE';# 排 除 自 己kill(HUP, -$$);# 通 知 自 己 的 进 程 组}412

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

Saved successfully!

Ooh no, something went wrong!