ps au | 的结果grep ssh 在 Node.js(使用spawn/pipe)与 shell 中的不同

2024-01-14

我正在研究节点流和子进程。所以我想用管道模拟下一个 shell 命令:

ps au | grep ssh

所以我写了下一个代码:

var spawn = require('child_process').spawn;
var ps    = spawn('ps',   ['au']);
var grep  = spawn('grep', ['ssh']);

ps.stdout.pipe(grep.stdin);

grep.stdout.on('data', function(data) { console.log(data) });

然后我运行它,但没有任何反应。我做错了什么?

附: - 我知道:

require('child_process')
   .exec('ps au | grep ssh', function(err, stdout, stderr) { 
       ... 
   }). 

我只是在玩 Node.js,我想了解这个示例有什么问题。

更新1:
看来用 grepbash程序按预期工作,但使用 grepssh没有结果。虽然ps au | grep ssh给了我这个结果:

vagrant 11681 0.0 0.1 10464 916 pts/0 S+ 07:54 0:00 grep --color=auto ssh.

你打电话时ps它将列出与传递的选项匹配的所有当前正在运行的进程。哪个可能会寻找ps au像这样的东西:

tniese  3251   0,0  0,0  2479028   3004 s000  S+    4:06am   0:00.03 -bash
root    4453   0,0  0,0  2452408    876 s004  R+    4:06pm   0:00.00 ps au

你打电话时ps au | grep ssh在壳里grep将过滤该结果以仅显示包含以下内容的行ssh.

If the grep之前由 shell 启动ps创建其列表,然后过滤前的输出将是:

tniese  3251   0,0  0,0  2479028   3004 s000  S+    4:06am   0:00.03 -bash
root    4453   0,0  0,0  2452408    876 s004  R+    4:06pm   0:00.00 ps au
tniese  4478   0,0  0,0  2441988    596 s000  R+    4:06pm   0:00.00 grep ssh

The grep进程将匹配其自己的条目,因为它包含传递的参数,因此过滤结果将是:

tniese  4478   0,0  0,0  2441988    596 s000  R+    4:06pm   0:00.00 grep ssh

让我们看看您的代码发生了什么:

var spawn = require('child_process').spawn;
var ps    = spawn('ps',   ['au']);
var grep  = spawn('grep', ['ssh']);

ps.stdout.pipe(grep.stdin);

通过spawn,您可以告诉操作系统启动该进程ps, ps不需要等到输出可以通过管道传输到任何地方才运行,但可以在此之前启动,它可能只在尝试写入其输出流时被迫等待。然后你的产卵grep,但当时grep已推出ps可能已经在内部创建了进程列表,原因是它不包含grep过程。的输出ps然后传递给 grep。但由于缺少此输出grep ssh它不会显示那条线。

Wether grep是否出现在您的列表中很大程度上取决于操作系统。一般来说,无论是否列出,您都应该假设它是随机的。或者你需要等到ps退出并启动grep在那之后。

您需要始终记住,当前操作系统具有抢占式多任务处理,并且调度程序可能会在之后立即暂停节点spawn('ps', ['au']);并立即继续该过程ps创建/请求列表。

我希望这个解释比我的评论更清楚一些。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ps au | 的结果grep ssh 在 Node.js(使用spawn/pipe)与 shell 中的不同 的相关文章

  • 记录jQuery中调用的方法和参数

    假设我有 jQuery 并且加载了几个插件 我运行一些这样的代码 someSelector someMethod someParam someOtherParam someOtherSelector someOtherMethod anot
  • 捕获外部脚本文件中的 javascript 错误

    我有一点 JavaScript Jquery 工具的叠加层 http flowplayer org tools overlay index html 当放到错误使用它的页面上时可能会引发异常 我正在尝试优雅地处理它 我有一个通用的 wind
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • JointJS - 处理链接删除点击

    创建链接后 将鼠标悬停在其上会显示红色 X 以将其删除 单击此按钮将触发一系列事件 通过订阅 全部 活动收集 单元格 向下指针 链接 向下指针 cell pointermove x5 似乎可疑 单元格 指针向上 在浏览了文档并花费了太长时间
  • Angular-Datatables + Angular-xeditable:取消可编辑行

    当组合 Angular DataTables 和 Angular XEditable 时 添加新行时会取消可编辑行 这是jsfiddle https jsfiddle net faj61h5d 10 示例操作如下 1 这是初始状态 2 将第
  • 如何在参数上使用 .reduce() 而不是特定的数组或对象?

    我想定义一个函数 flatten 将多个元素展平为一个数组 我知道以下是不可能的 但本质上我想这样做 var flatten function var flattened arguments reduce function acc elem
  • t /= d 是什么意思? Python 和错误

    t current time b begInnIng value c change In value d duration def easeOutQuad swing function x t b c d alert jQuery easi
  • 正则表达式 - 避免表达式中出现字符串

    我正在尝试创建一个应该匹配以下情况的正则表达式 如果单词完全匹配 first second third 那么匹配应该失败 但如果它周围有任何字符 那么应该匹配该字符串 我还需要避免字符串中的某些字符集 如果这些字符是字符串的一部分 则匹配结
  • 运行“npm”返回“错误:找不到模块‘继承’”

    module js 340 throw err Error Cannot find module inherits at Function Module resolveFilename module js 338 15 at Functio
  • Rxjs 可观察等待直到满足某些条件

    我有以下重试逻辑来重试操作 对于单个请求来说它工作得很好 对于多个正在进行的请求 我想在重试之前等待现有的重试逻辑完成 handleError errors Observable
  • 如何检查jquery数据表中的每个复选框?

    我有一个第一列带有复选框的表格 我使用 jQuery DataTable 插件显示我的表格 我制作了 2 个链接来选择 取消选择每个复选框 这是选择全部的一个 a href Select all a 和 JavaScript functio
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 全局定义的 AngularJS 控制器和封装

    根据 AngularJS 的教程 控制器函数仅位于全局范围内 http docs angularjs org tutorial step 04 http docs angularjs org tutorial step 04 控制器函数本身
  • 在外部单击时关闭弹出 div

    我有一个弹出 div 仅在单击特定按钮时显示 单击同一按钮时它甚至会隐藏 我的问题是 我还想在单击外部任何地方时隐藏 div 我无法这样做 因为弹出 div 位于主包装类内部 并且无法通过在包装类上使用 click 事件并使其隐藏来做到这一
  • IE6 丢失查询字符串

    我有一个使用 javascript 从查询字符串中获取值的页面window location 从网络服务器运行时效果很好 但如果我通过将其放在地址栏中使用 IE6 在本地运行它 c mysite index htm 网站创建的任何查询字符串
  • 单击react.js 切换列表的背景颜色

    我正在尝试创建一个具有以下功能的列表 悬停时更改列表项的背景颜色 单击时更改列表项的背景颜色 在单击的元素之间切换背景颜色 即列表中只有一个元素可以具有 clicked 属性 我已经执行了 onhover 1 和 2 功能 但无法实现第三个
  • 如何在 JavaScript 中设置/更新 String 对象的值

    我有一个具有一些属性的对象字符串对象 var obj foo new String bar 我在用字符串对象因为我需要在对象上存储额外的子属性 同时仍然能够获取字符串值 obj foo baz baz obj foo gt bar 我觉得问
  • 如何在浏览器同步中配置端口

    我有一个gulp任务运行于browser sync 默认情况下它运行在node js服务器的端口3000上 我想将默认端口更改为任何其他端口 例如3010 var gulp require gulp connect require gulp
  • 使用 stopPropagation() 处理 React 事件委托

    我有一个 React 项目 应该可以放置在任何网站上 我的想法是 我托管一个 javascript 文件 人们放置一个具有特定 ID 的 div 然后 React 在该 div 中进行渲染 到目前为止 除了点击事件之外 这是有效的 这些事件
  • html5 canvas 使用图像作为蒙版

    是否可以使用具有形状的图像作为整个画布或画布内图像的蒙版 我想将图像放置在画布中 并在图像上添加蒙版 然后将其另存为新图像 您可以使用 source in globalCompositeOperation 将黑白图像用作蒙版 首先 将蒙版图

随机推荐

  • 如何在Python中正确应用赋值运算符?

    我必须对一个大数组进行一些数学运算 例如加法 乘法 为了防止任何 MemoryError 我正在按照此答案的建议进行计算thread https stackoverflow com questions 4318615 python nump
  • 从常规数组中创建一个具有相同键和值的关联数组

    我有一个看起来像的数组 numbers array first second third 我想要一个函数 它将将此数组作为输入并返回一个如下所示的数组 array first gt first second gt second third
  • 如何在C中动态分配字符串数组?

    我是菜鸟所以别太难了 而不是这样的东西 char string NUM OF STRINGS NUM OF LETTERS 是否可以使用 malloc 动态分配数组中的字符串数量 就像为 char 指针动态分配内存一样 像这样的事情 int
  • ThreadPoolExecutor - 在队列之前使用线程

    我正在用 java 给定的 ThreadPoolExecutor 替换旧线程池 在传统线程池中 启动时会创建 60000 个线程 但在 ThreadPoolExecutor 中 使用核心线程 最大线程和 prestartAllCoreThr
  • FabricJS:始终在画布上居中对象

    是否可以始终将对象置于 Fabricjs 画布的中心 背景 我正在构建一个网络工具 可以使用 Fabricjs 轻松创建复杂的动画 我希望能够将画布大小的宽度和高度设置为 100 因此 我想将所有对象放置在中心并为其添加 X Y 偏移 当我
  • 通过关系获取相关数据

    我正在使用 laravel 5 5 13 I have App Entity其中有很多App Comment的和许多App Thumb s 现在我可以像这样轻松获取评论和拇指 public function show Entity enti
  • Rails - 如何基于布尔字段进行搜索? (MySQL 错误)

    我正在运行以下查询 projects company projects where active true order created at ASC 我收到错误 ActiveRecord StatementInvalid Mysql Par
  • 使用数据注释进行 MVC 验证 - 模型类还是视图模型类?

    将数据验证注释放在模型或视图模型中是最佳实践吗 一种方法相对于另一种方法的优点 缺点是什么 我很想知道每个人都在哪里进行验证 我目前正在模型项目中进行验证 然而我看到一些人说这不是最佳实践 就最佳实践而言 我想说 两者都不是 验证应该是分开
  • 通过 Group By Pandas 创建两个聚合列

    我是 DataFrames 的新手 我想对多列进行分组 然后对最后一列进行求和并计数 例如 s pd DataFrame np matrix 1 2 3 4 3 4 7 6 3 4 5 6 1 2 3 7 columns a b c d a
  • Jenkins 是否自动创建上游/下游?

    我正在使用詹金斯进行持续集成 我创建了单独的视图 例如服务器 A 的视图 A 服务器 B 的视图 B 等 每个视图都根据服务器的环境属性构建我的项目 但我可以看到 即使没有明确创建 也会创建不相关的上游和下游 有什么解决办法吗 在 Jenk
  • 通过Data类发送类对象

    安卓最近推出了工作经理 https developer android com reference androidx work WorkManager用于调度任务 该功能的强大功能之一工作经理 https developer android
  • 如何使用 oauth2 安全性在资源服务器中配置资源 id

    我正在尝试创建授权服务器和资源服务器 当尝试从授权服务器获取访问令牌时 其工作并获取具有以下详细信息的访问令牌 access token 5ffbc2d7 2a27 4f08 921f f7de2410b5f5 token type bea
  • Gremlin Python createIndex (Tinkerpop)

    我目前正在使用 Tinkerpop 与gremlin python 客户端 https pypi python org pypi gremlinpython 3 2 4使用默认的TinkerGraph Gremlin https tinke
  • Python 字符串匹配

    如果一个字符串包含 SUBJECT123 如何确定字符串有subject在Python中 if subject in mystring lower do something
  • Redis 键中冒号的用途是什么

    我正在学习如何在我的项目中使用 Redis 我不明白的一件事是键名称中冒号的确切用途 我见过这样的键名 users bob color blue item bag 冒号是否可以将键分类并加快查找键的速度 如果是这样 您可以在命名键时使用多个
  • 仅使用 CSS 使相邻同级元素具有相同的宽度

    我提前表示抱歉 因为出于保密原因 我无法显示我正在处理的代码 图像 但我认为我可以很简单地解释它 我有一个 h1 充当我的网页标题的元素 该标题可以根据用户所在的特定页面的标题更改长度 因此它可以说 主页 也可以说 已保存的项目 等 长度各
  • 特定版本的 HTC DESIRE HD 中 SQLite 中缺少表

    我的应用程序在 asset 文件夹中有一个 SQLite 数据库 当用户启动我的应用程序时 将创建数据库和表 这适用于许多设备 Nexus One Htc Magic SGS X10 甚至 Htc Desire HD v2 2 我的应用程序
  • 大 O 时间复杂度中的指数分母(分数指数)从何而来?

    In algorithm descirptions I sometimes encounter time complexities that look like O n29 20 m7 3 I see where and numerator
  • 为什么 stanford corenlp 性别识别是不确定的?

    我有以下结果 正如您所看到的 名字 edward 有不同的结果 空和男性 好几个名字都发生过这种情况 edward Gender null james Gender MALE karla Gender null edward Gender
  • ps au | 的结果grep ssh 在 Node.js(使用spawn/pipe)与 shell 中的不同

    我正在研究节点流和子进程 所以我想用管道模拟下一个 shell 命令 ps au grep ssh 所以我写了下一个代码 var spawn require child process spawn var ps spawn ps au va