如何从进程名获取进程id?

2024-01-04

我正在尝试创建一个 shell 脚本来获取进程号我的 Mac 上的 Skype 应用程序。

ps -clx | grep 'Skype' | grep 'Skype' | awk '{print $2}' |头-1

上面的方法工作正常,但是有两个问题:

1) The grep如果进程的名称只包含“Skype”,命令将获取所有进程。如果进程名称完全正确,我如何确保它只得到结果Skype?

2)我想由此制作一个 shell 脚本,可以从终端使用它,但进程名称应该是该脚本的参数:

#!/bin/sh

ps -clx | grep '$1' | awk '{print $2}' | head -1

这不会返回任何东西。我认为这是因为$2在 awk 中也被视为参数。我该如何解决这个问题?


Your ps -cl1输出看起来像这样:

  UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
  501   185   172      104   0  31  0  2453272   1728 -      S    ffffff80145c5ec0 ??         0:00.00 httpd
  501   303     1 80004004   0  31  0  2456440   1656 -      Ss   ffffff8015131300 ??         0:11.78 launchd
  501   307   303     4004   0  33  0  2453456   7640 -      S    ffffff8015130a80 ??         0:46.17 distnoted
  501   323   303 40004004   0  33  0  2480640   9156 -      S    ffffff80145c4dc0 ??         0:03.29 UserEventAgent

因此,每行的最后一个条目就是您的命令。这意味着您可以使用正则表达式的全部功能来帮助您。

The $正则表达式中表示字符串的结尾,因此,您可以使用$指定输出不仅必须具有Skype其中,它必须以Skype。这意味着如果您有一个名为Skype Controller,你不会把它拉起来:

ps -clx | grep 'Skype$' | awk '{print $2}' | head -1

您还可以通过使用来简化事情ps -o格式以仅拉出您想要的列:

ps -eo pid,comm | grep 'Skype$' | awk '{print $1}' | head -1

并且,你可以消除head通过简单地使用awk能够为您选择线路。在awk, NR是您的记录号码。因此你可以这样做:

ps -eo pid,comm | grep 'Skype$' | awk 'NR == 1 {print $1}'

哎呀,现在我想起来了,我们可以消除grep too:

ps -eo pid,comm | awk '/Skype$/  {print $1; exit}'

这是利用 awk 使用正则表达式的能力。如果该行包含正则表达式“Skype$”,它将打印第一列,然后退出

唯一的问题是,如果你有一个命令Foo Skype,这也会拾取它。为了消除这种情况,你必须做一些更花哨的步法:

ps -eo pid,comm | while read pid command
do
    if [[ "$command" = "Skype" ]]
    then
        echo $pid
        break
    fi
done

The while read正在读取两个变量。诀窍是read使用空格来划分读入的变量。但是,由于只有两个变量,最后一个变量将包含整行的其余部分。因此如果命令是Skype控制器,整个命令将被放入$command即使里面有一个空格。

现在,我们不必使用正则表达式。我们可以将该命令与等式进行比较。

输入的时间较长,但实际上使用的命令和管道较少。记住awk循环遍历每一行。您在这里所做的只是使其更加明确。最后,这实际上比你原来的效率要高得多。

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

如何从进程名获取进程id? 的相关文章

  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • XCode 4.2.1 在 Lion 10.7.2 上启动时崩溃

    这周我买了大约 10 年来的第一台 Mac 是的 这是一台二手 Mac Pro 2x2GHz 双核 Xeon 2GB RAM 它全新安装了 Mac OS X Lion 10 7 2 我只安装了 OmniOutlner Pro Textmat
  • 在 mac-os-x Yosemite 上调用“npm”时,Jenkins 构建步骤失败

    在开始之前 我想说我已经检查过这些答案 Jenkins 构建步骤在 npm install 上失败 https stackoverflow com questions 11564508 jenkins build step fails on
  • NSTextField 弹跳截断的文本而不是换行

    我想知道是否有一种简单的方法来 弹跳 或滚动NSTextField文本太长而无法显示 例如 lt scroll This is a rather large pi ece of text 因此 在此示例中 文本将滚动到末尾 显示消息的其余部
  • 警告:找不到模板 /usr/local/git/share/git-core/templates

    我收到这个错误警告 找不到模板 usr local git share git core templates当我在本地存储库中克隆存储库时这个链接 https github com zikula modules Scribite issue
  • Mac OS 上的诗歌安装失败,显示“should_use_symlinks”

    我正在尝试使用以下命令安装诗歌 curl sSL https install python poetry org python3 但它失败了 但有以下例外 例外 此版本的 python 无法在不使用符号链接的情况下创建 venvs 下面是详
  • Bash 脚本:自动为 mpeg-dash 进行 ffmpeg 编码

    我正在编写一个 bash 文件来创建视频编码和串联 以供 dash 实时流媒体使用 基本上 它读取输入视频文件夹 将所有视频编码为三种分辨率格式 然后将它们连接起来创建三个适应集 DIAGRAM 该脚本检查 fps 一致性 如果输入不是 1
  • gdb 声称它不知道如何运行

    我在 Mac Pro 上的 Mac OS X 10 6 6 上使用 Xcode 3 2 3 来构建 GrowlTunes 的修订版 5fd480ef577f咆哮开发存储库 http growl info hg growl developme
  • xcode 4 垃圾收集已删除?

    我正在学习 Xcode 和 Objective C 但是我正在阅读的书使用的是旧版本 3 2 的 Xcode 其中一章完全致力于内存和泄漏 说我需要通过 项目设置 gt 构建 打开垃圾收集 但是 我找不到垃圾收集设置 它已被删除还是我只是错
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • Bash 正则表达式——似乎无法匹配任何 \s \S \d \D \w \W 等

    我有一个脚本试图从 gparted 获取信息块 我的数据如下所示 Disk dev sda 42 9GB Sector size logical physical 512B 512B Partition Table msdos Number
  • Spyder 无法启动:spyder:找不到命令

    我已经安装了spyderpip3 install spyder在苹果电脑上 但是 当我无法从 bash 启动它时 它会显示spyder command not found 我已按照其说明进行操作Github页面 https github c
  • 监控 Thunderbolt 端口连接的变化

    我正在满足一个要求 需要监视 Thunderbolt 端口连接的变化 当 Thunderbolt 电缆连接或断开时 我尝试使用IOServiceMatching kIOUSBInterfaceClassName from IOKit框架但我
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • 通过shell脚本进行串口控制

    我正在开发一个方向控制器 我有一个开发板 它通过 I2C 与传感器 指南针 通信 由于主板非常有限 没有操作系统 我开发了一个简单的程序来接收以下内容 1 get 0 读取传感器的寄存器 0 2 set 0 10 将传感器的寄存器 0 设置
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • awk 的 printf 插入多个变量的正确语法是什么?

    我复制了一些使用 printf 输出字符串在文件中出现的频率的代码 awk BEGIN print The number of times a appears in the file a a counter 1 END printf s n
  • ln: /usr/lib/libssl.dylib: OSX 不允许操作

    我正在尝试创建一个到 usr lib 的符号链接 但我似乎没有权限 包含在 root 中 系统返回不允许该操作 在 Yosemite 上我工作得很好 但在 El Capitan 上却坏了 有人知道我能做什么吗 我在使用 Sublime te
  • 使用 XMLStarlet(图像注释)将值连接到现有 xml 属性

    我正在使用 xml 来注释图像 我正在使用 xmlstarlet 和 unix bash 命令 但当我尝试将值附加到现有 xml 属性值时遇到一些问题 例如 我有
  • 在 bash 中从文件中读取星号字符 (*)

    我正在从 txt 文件中获取行 说输入 txt a b 然后我正在阅读它 bin bash file 1 ans 0 while read r line n line do echo line done lt file passing th

随机推荐

  • 使用 Dapper.NET 从存储过程调用获取 Oracle OUT 参数的值

    编辑 使用Execute方法而不是Query QueryMultiple方法 我的OUT SUCCESS参数现在有一个AttachedParam与 与 与OracleParameter有返回值 因此 例如 如果我仅需要检索非游标参数 那么这
  • 打包使用 ImageMagick C API 的应用程序

    我创建了一个使用 ImageMagick C API 的小型 Windows 应用程序 但遇到了一些困难 该应用程序运行良好 我已准备好与我们组织中的其他一些人共享它 但如果不在目标计算机上安装 ImageMagick 我找不到有关分发此类
  • 北欧航空公司。变量是否在数据步骤的每次迭代中都设置为缺失?

    我一直认为数据步骤的每次迭代都将变量设置为缺失 然而 在下面的代码中 变量看起来像是保留了最开始获取的值 我不明白为什么会发生这种情况 data one input x y datalines a 10 a 13 a 14 b 9 run
  • Apache Camel超时同步路由

    我正在 trwing 使用 Apache Camel 构造一个带有超时的同步路由 但我在框架中找不到任何可以解析它的内容 所以我决定建立一个为我制作的流程 public class TimeOutProcessor implements P
  • 为什么 Visual Studio 2019 社区中我的 SSIS 工具箱为空?

    我安装了 Visual Studio 2019 Community 然后安装了数据工具 我可以打开 Integration Services 项目 但当我查看 SSIS 工具箱时 它是空的 我该如何解决 我使用的是 Visual Studi
  • 无法加载 DLL“mqrt.dll”

    我开发了一个 WCF 服务 它作为 Windows 服务托管并公开 MSMQ 端点 我在 SERVER1 上有客户端应用程序 在 SERVER2 上有 MSMQ 和 WCF 服务 当 SERVER1 ClientApp 尝试将消息推送到 S
  • 数据准备好后如何关闭Loader

    In my Ionic 2app 中 我有一个使用服务的组件 该服务使用 http GET 来获取一些数据 然后 我的组件调用该服务 当数据可用时 它会设置并呈现该数据 看起来像以下 export class FarmList implem
  • 在 Access 中导入 Excel 数据

    我的 Access 应用程序中有一个表 需要填充一堆 Excel 文件中的数据 我尝试了这段代码 DoCmd TransferSpreadsheet acImport acSpreadsheetTypeExcel8 strTable str
  • 使用 BouncyCastle 在 C# 中读取 DER 私钥

    我正在尝试使用 BouncyCastle 将 RSA 私钥读入 Net 来测试我之前加密的数据 加密数据使用公钥和 Bouncy Castle 工作正常 我还使用了与下面相同的私钥 DER 格式 在 PHP 应用程序中成功解密我的数据 但我
  • VHDL门控时钟如何避免

    我收到了避免使用门控时钟的建议 因为它可能会导致松弛和时序限制问题 但我想问一下我可以认为什么是门控时钟 例如 此代码对时钟进行门控 因为 StopCount 对它进行门控 process ModuleCLK begin if rising
  • 无法从 Windows 主机连接到 WSL2 上的本地服务器

    我有一个Python项目使用waitress在 WSL2 Ubuntu 20 上的本地主机上提供服务 我从 VSCode 远程启动服务器 但无法使用地址从 Windows 上的浏览 器连接到它http 127 0 0 1 5998 http
  • Objective-C:如何替换 HTML 实体? [复制]

    这个问题在这里已经有答案了 我从互联网获取文本 它包含 html 实体 即 oacute 我想将此文本显示到自定义 iPhone 单元格中 我尝试在自定义单元格中使用 UIWebView 但我更喜欢使用多行 UILabel 问题是我找不到任
  • 如何让 favicon.ico 在龙卷风上工作

    龙卷风服务器默认不执行 favicon ico 所以我总是得到这样的信息 W 130626 10 38 16 web 1514 404 GET favicon ico 192 168 1 57 0 57ms 我以各种方式使用 web sta
  • 是否有用于 Java 或 PHP 的 OData 服务器库来公开 OData?

    我想知道是否有或为什么没有适用于 Java 的 ADO NET 数据服务服务器库 我需要从 Java 服务器公开数据库 但我只看到 Microsoft 为 java 提供客户端 而不是服务器部分 当您需要 NET Windows 来公开它时
  • CSS :before 和 :first-child 组合

    我使用以下代码在菜单项之间添加分隔符 navigation center li before content color fff 现在我希望第一个项目前面没有分隔符 所以我想出了以下代码 navigation center li befor
  • 在 Python 中递归地重新加载包(及其子模块)

    在 Python 中 您可以按如下方式重新加载模块 import foobar import importlib importlib reload foobar 这适用于 py文件 但对于 Python 包 它只会重新加载包并not任何嵌套
  • Angular HttpClient:“Blob”类型上不存在属性“headers”[重复]

    这个问题在这里已经有答案了 我正在使用 Angular 5 这是我从服务器下载文件的代码 1 服务 export url return this http get url responseType blob 2 组件代码 public do
  • ios6如何播放视频

    我很困惑 MPMoviePlayerViewController 和 MPMoviePlayerController 在 ios6 中本地播放视频的最佳方式是什么 这是我的代码 NSURL url NSURL fileURLWithPath
  • 导航回屏幕时不会调用 useEffect - React Navigation

    我有一个屏幕 可以调用 api 来获取一些数据 然后显示 我看到的一个问题是 当我离开屏幕 我使用的是 React navigation 6 x 然后返回到屏幕时useEffect 没有被调用 从我到目前为止读到的内容来看 这取决于user
  • 如何从进程名获取进程id?

    我正在尝试创建一个 shell 脚本来获取进程号我的 Mac 上的 Skype 应用程序 ps clx grep Skype grep Skype awk print 2 头 1 上面的方法工作正常 但是有两个问题 1 The grep如果