@apify/ps-tree

中文文档
1.2.0发布于 2023/03/01MITCommonJS近 30 天下载 90.2万

把所有的小孩都带走

中文使用文档
文档目录3 节
  1. 跨平台支持
  2. 窗口
  3. 麻省理工学院

树树

Build Status Code Climate Test Coverage npm Version Node.js Version Dependency Status

注: 这是叉子 树树 国家防范机制一揽子计划,包括一些修正和额外安排.

有时你无法像预期的那样杀死孩子的过程,这是UNIX的一个特征.

在UNIX中,一个进程可能通过使用出站呼叫而终止,它的主进程可能通过使用等待系统调用来等待该事件. 等待系统调用返回终止孩子的过程标识符,这样父母就可以告诉哪些孩子已经终止。 但是,如果父母终止,所有孩子 都指定作为他们的新父母 加入过程。 因此,儿童仍然有一个家长来收集其状况和被处决的统计数据. (出自"操作系统概念"

解决方案:使用 ps-tree 获取所有进程 child_process 可能已经开始了,所以可以全部终止.

var cp = require('child_process'),
    psTree = require('ps-tree');

var child = cp.exec("node -e 'while (true);'", function () {...});

// This will not actually kill the child it will kill the `sh` process.
child.kill();

怎么样? 因为执行官实际上是这样工作的:

function exec (cmd, cb) {
  spawn('sh', ['-c', cmd]);
  ...
}

sh 开始解析命令字符串并启动进程,等待它们终止,但 exec 返回带有 pid 的处理对象 sh 进程. 但是,因为它是在 wait 模式杀死它不会杀死孩子.

使用 ps-tree 像这样:

var cp = require('child_process'),
    psTree = require('ps-tree');

var child = cp.exec("node -e 'while (true);'", function () { /*...*/ });

psTree(child.pid, function (err, children) {
  cp.spawn('kill', ['-9'].concat(children.map(function (p) { return p.PID })));
});

如果你喜欢跑 脚本 从命令行中, 使用 : node ./bin/ps-tree.js

跨平台支持

这个 ps-tree 模块在 *nix vs. Windows 上表现不同,方法是生成不同的程序并解析其输出. 这是基于 process.platform 而不是检查是否 ps 兼容程序存在于系统中.

*没有

  1. " 需要被剥去 "
$ ps -A -o comm,ppid,pid,stat
COMMAND          PPID   PID STAT
bbsd             2899 16958 Ss
watch <defunct>  1914 16964 Z
ps              20688 16965 R+

窗口

  1. wmic PROCESS WHERE ParentProcessId=4604 GET Name,ParentProcessId,ProcessId,Status)
  2. 头列的顺序固定了
> wmic PROCESS GET Name,ProcessId,ParentProcessId,Status
Name                          ParentProcessId  ProcessId   Status
System Idle Process           0                0
System                        0                4
smss.exe                      4                228

麻省理工学院

版本与发布记录

@apify/ps-tree 共发布 6 个版本,首次发布于 2018/08/17;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.2.0latest2023/03/013 年前
1.1.42021/05/045 年前
1.1.32018/11/277 年前
1.1.22018/09/288 年前
1.1.12018/08/178 年前
1.1.02018/08/178 年前

关于 @apify/ps-tree 的常见问题

@apify/ps-tree 是什么?

把所有的小孩都带走

如何安装 @apify/ps-tree?

在项目目录运行 npm install @apify/ps-tree,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 ps-tree,可以用 npx ps-tree 直接运行。

@apify/ps-tree 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/apify__ps-tree 是否存在。

@apify/ps-tree 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@apify/ps-tree 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 0.10。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@apify/ps-tree 可以商用吗?

@apify/ps-tree 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@apify/ps-tree 的下载量有多少?

根据 npm 官方下载统计,@apify/ps-tree 在 2026/10/06 – 2026/11/04 这 30 天内被下载 902,138 次,日均约 30,071 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@apify/ps-tree 还在维护吗?

最新版本 1.2.0 发布于 2023/03/01(3 年前);至今共发布 6 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/08/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。