关于 pgrep 返回自身的确认

     2023-04-14     39

关键词:

【中文标题】关于 pgrep 返回自身的确认【英文标题】:Confirmation about pgrep returning itself 【发布时间】:2017-06-08 14:08:34 【问题描述】:

我在这里阅读了几篇关于 pgrep “似乎”返回自身的情况的帖子,即使它永远不会返回。关键似乎是 bash 和 sh 功能之间的区别。除了在我的情况下,我已经确认 sh 确实是 bash 的链接。

我在 SuSE 12 x86_64 上运行 /bin/sh 是 bash 的链接 /bin/bash 是真正的二进制文件

我有一个像这样调用 pgrep 的 Ruby 脚本:

  cmd="/usr/bin/pgrep -lf \"#target\""
  pidList=`#cmd`

我需要使用完整的命令行,因为我实际上是在使用一个参数来唯一标识一个特定的“java”进程。

现在,由于一些不相关的愚蠢,我几乎立即对返回的每个 pid 执行 ps -p。有一段时间,这让我很伤心,因为 ps 有时什么也不返回。最终,我能够捕捉到 pid 上的 ps 返回 pgrep 命令的情况。但它是 pgrep 命令本身,而不是 sh -c "pgrep -f blah"

回顾一下:

pgrep 永远不会返回自己。但是 sh 与 bash 的差异可能会导致它显示一个子shell。但是我验证了 sh 是指向 bash 的链接,所以行为上应该没有区别。

我怀疑(并且正在寻找确认)是由于 Ruby 反引号而创建了一个额外的子命令,这就是 pgrep 命令拾取的(仅有时..时间问题?)。

这真的很痛苦,我想确保我实施的修复能够真正解决问题。鉴于我正在使用的代码,我要么去

    在我的命令末尾附加一个| grep -v grep 在 Ruby 脚本中循环遍历返回的结果时,丢弃任何包含“grep”的结果

我认为 #2 更快,但我仍然很烦我必须过滤掉 pgrep 本身。

我是在正确的轨道上还是你认为还有其他事情在起作用?

感谢您的宝贵时间!

【问题讨论】:

bash 被调用为sh 时,它表现为POSIX sh,而不是bash 啊,那将是丢失的拼图!谢谢! 【参考方案1】:

问题不在于 shell 风格:调用 pgrep 的 shell 进程也显示在进程之间(并且在其完整命令中包含搜索到的字符串),所以我们需要像这样过滤掉它:

pgrep -f target | grep -v $$

【讨论】:

【参考方案2】:

答案已经在我的问题的 cmets 中,但我想我会用官方答案结束这个问题。

我丢失的信息是

当 bash 作为 sh 调用时,它的行为类似于 POSIX sh,而不是 bash。 – Jörg W Mittag 1 月 23 日 23:31

所以是的,pgrep 表现正常。但是当你通过反引号从 Ruby 脚本调用它时,你仍然需要过滤掉 'pgrep'

【讨论】:

pgrep命令

pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定... 查看详情

关于http

//http客户端发起请求,创建端口//http服务器在端口监听客户端请求而//http服务器向客户端返回状态和内容//1.chrome搜索自身的DNS缓存//2.搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)//3.读取本地的host文件//4.... 查看详情

pgrep命令

整理中本文出自“赵东伟的博客”博客,请务必保留此出处http://zhaodongwei.blog.51cto.com/4233742/1877688 查看详情

关于http响应状态码

http状态返回代码1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。http状态返回代码代码  说明100  (继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待... 查看详情

关于视图的 Swift 未确认协议“UITableViewDataSource”

】关于视图的Swift未确认协议“UITableViewDataSource”【英文标题】:Swiftaboutviewdoesnotconfirmtoprotocol"UITableViewDataSource"【发布时间】:2016-10-2205:54:52【问题描述】:classshowPageViewController:UIViewController,UITableViewDataSource,UITa 查看详情

一个关于jsconfirm确认框的问题

<scripttype="text/javascript">vartxt=""functionmessage()tryadddlert("Welcomeguest!")catch(err)txt="本页中存在错误。\n\n"txt+="点击“确定”继续查看本页,\n"txt+="点击“取消”返回首页。\n\n... 查看详情

关于选择单选按钮的确认[重复]

】关于选择单选按钮的确认[重复]【英文标题】:ConfirmationaboutselectionofradioButton[duplicate]【发布时间】:2014-06-2819:00:06【问题描述】:如何通过调用javascript的内联函数来检查单选按钮是否被选中?<html><head><title>Testth... 查看详情

linux命令(177)——pgrep命令(代码片段)

...简介2.命令格式3.选项说明4.常用示例参考文献1.命令简介pgrep(processgrep)根据进程名称或其他属性查找进程。pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程ID。每一个进程ID以一个十进制数表... 查看详情

确认返回导航

】确认返回导航【英文标题】:Confirmationofbacknavigation【发布时间】:2013-10-1307:18:25【问题描述】:我只想确认我拥有的其中一个视图的后退导航。具体的视图是一个UICollectionViewController。我知道我在if语句中的确切编码不正确。... 查看详情

pgrep---以名称为依据从运行进程队列中查找进程(代码片段)

pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定... 查看详情

关于进程和性能监控

        Linux系统状态的查看及管理工具:pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohuppstree命令:pstree-displayatreeofprocessesps-reportasna 查看详情

如何使子类在虚拟方法中返回自身的对象(副本)

】如何使子类在虚拟方法中返回自身的对象(副本)【英文标题】:Howtomakeasubclassreturnanobject(copy)ofitselfinavirtualmethod【发布时间】:2015-11-2820:15:21【问题描述】:我目前正在尝试理解C++中的继承,但我很困惑为什么我不能让我的... 查看详情

在 C++ DLL 的成员函数中返回自身的类

】在C++DLL的成员函数中返回自身的类【英文标题】:ClassreturningitselfinmemberfunctionsinC++DLL【发布时间】:2018-01-1610:08:24【问题描述】:要在DLL中使用类,为了编译器之间的兼容性,使用来自https://www.codeproject.com/Articles/28969/HowTo-Expor... 查看详情

在 const 时返回指向自身的指针的类函数。 C++

】在const时返回指向自身的指针的类函数。C++【英文标题】:Classfunctionthatreturnsapointertoitselfwhilebeingconst.c++【发布时间】:2015-12-0616:16:57【问题描述】:这是我尝试过的:game*Reversi::clone()constReversi*ptr=this;returnptr;但我收到以下错误... 查看详情

9.2-3pstree&pgrep(代码片段)

9.2pstree:显示进程状态树   pstree命令以树形结构显示进程和进程之间的关系。   如果不指定进程的PID号,或者不指定用户名称,则会以init进程为根进程,显示系统的所有进程信息;若指定用户或PID,则将... 查看详情

关于this

1、this既不指向函数自身,也不指向函数的词法作用域this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用 如果要从函数对象内部引用自身,只使用this是不够的解决方法一:具名函数,在它内... 查看详情

GCP 云功能未正确接收/确认 PubSub 消息

...些数据处理工作流程。这些位置处理物理地址并返回一些关于它们的指标。工作流使用CloudFunctions和PubSub流的组合。在工作 查看详情

为啥将自身作为默认属性返回的对象会挂起 excel 并使调试器崩溃?

】为啥将自身作为默认属性返回的对象会挂起excel并使调试器崩溃?【英文标题】:Whydoesanobjectreturningitselfasthedefaultpropertyhangexcelandcrashthedebugger?为什么将自身作为默认属性返回的对象会挂起excel并使调试器崩溃?【发布时间】:2... 查看详情