当前位置: 首页 > 编程笔记 >

Shell脚本中获取进程ID的方法

谈琦
2023-03-14
本文向大家介绍Shell脚本中获取进程ID的方法,包括了Shell脚本中获取进程ID的方法的使用技巧和注意事项,需要的朋友参考一下

提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。

当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。

在某些情况下,你也许想要知道运行中的子shell的PID。这个PID信息可以在不同的情况下使用。比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件。有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身的子shell。

在bash中,子shell进程的PID存储在一个特殊的变量‘$$'中。这个变量只读,你不可以在脚本中修改它。比如:


#!/bin/bash

echo "PID of this script: $$"

上面的脚本会得到下面的输出:


PID of this script: 6583

除了$$, bash shell还会导出其他的只读变量。比如,PPID存储子shell父进程的ID(也就是主shell)。UID存储了执行这个脚本的当前用户ID。比如:


#!/bin/bash

 

echo "PID of this script: $$"

echo "PPID of this script: $PPID"

echo "UID of this script: $UID"

输出是:


PID of this script: 6686

PPID of this script: 4656

UID of this script: 1000

上面输出中,PID每次执行都会变化。这个因为每次运行都会创建一个新的shell。另一方面,PPID每次都会一样只要你在同一个shell中运行。

对于所有bash内置变量列表,参考man页。


$ man bash

 类似资料:
  • 问题内容: 我想编写一个Shell脚本(文件)以获取给定的进程ID。我要在这里执行的操作是,一旦获得进程ID,就想杀死该进程。我正在Ubuntu(Linux)上运行。 我能够用这样的命令来做到这一点 但我不确定如何通过Shell脚本来实现。 问题答案: 使用上的结果是在脚本一个坏主意,因为时间一定比例也将匹配你刚才援引的grep的过程。该命令避免了此问题,因此,如果您需要知道进程ID,那是一个更好

  • 本文向大家介绍Shell脚本获取进程的运行时间,包括了Shell脚本获取进程的运行时间的使用技巧和注意事项,需要的朋友参考一下 在我们的系统中,我曾写了一个脚本去定时更新一些repository,但偶尔会遇到问题,比如:git pull之时可能会卡在那里(可能由于某时刻的网络问题),它会阻碍后面的下一次更新。 所以我就在想,我今后启动这个脚本时,进行检查,如果上次运行的脚本还没结束,而且过了某个时

  • 本文向大家介绍Shell脚本中获取本机ip地址的3个方法,包括了Shell脚本中获取本机ip地址的3个方法的使用技巧和注意事项,需要的朋友参考一下 方法一: 方法二: 方法三:

  • 本文向大家介绍WIN32程序获取父进程ID的方法,包括了WIN32程序获取父进程ID的方法的使用技巧和注意事项,需要的朋友参考一下 学过windows程序设计的人都知道,windows中的进程是可以有父子关系的,拥有父子关系的进程,一旦父进程结束,子进程有会随之退出。但是如果进程之间没有父子关系,我们如何让子进程在父进程退出是也同时跟着退出呢?方法有很多,本文介绍其中的一种利用父进程ID的方案,实

  • 问题内容: 我以这种方式创建子流程: 如何获取该子进程ID? PS我正在Linux上工作。 问题答案: 仍然没有为此的公共API(请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896),但是有解决方法。 第一个解决方法是使用像这样的外部程序,并使用来调用它以获得pid :) 另一个基于以下事实:该类是抽象的,并且实际上根据您的平

  • 我试图执行一个脚本,该脚本执行一个EXPECT脚本和一个包含退出代码的派生进程。但是我无法将生成的进程的退出代码获取到主脚本。我总是得到零作为成功。 expect脚本是: 衍生脚本: Expect脚本的执行: 问题是,我无法获取生成的退出返回代码以期望脚本。我希望生成的脚本的退出代码为3到主脚本,主脚本应该以退出代码3退出。 请帮助我将生成的退出代码添加到主脚本。