当前位置: 首页 > news >正文

8个Linux进程管理命令详解及示例(三):pgrep和flock命令

1.pgrep 命令

想要查找流程及其详细信息?pgrep 命令可以帮助我们解决这个问题。

与用于从文件和输出中查找字符串的 grep 命令一样,pgrep 命令对进程执行相同的操作。

简单来说,pgrep 命令将为我们提供正在运行中的进程 PID

下面介绍如何使用 pgrep 命令的各种示例。

要使用 pgrep 命令,必须遵循给定的命令语法:

pgrep [options] pattern

在这里,pattern 将指定输出的参数。

下面列举一些具体的实例:


1.1使用 pgrep 命令查找特定进程的 PID

要找到特定进程的 PID,只需遵循给定的语法即可:

pgrep -u username process_name

假设想为用户 sagar 查找 ssh 的进程 ID,使用以下命令:

pgrep -u sagar ssh

图片


1.2获取用户拥有的进程数

如果想了解特定用户正在使用的进程数量,可以在pgrep命令后加上-c-u选项,并附上用户名,如下所示:

pgrep -c -u username

例如,要查找名为 sagar 的用户拥有的进程数:

pgrep -c -u sagar

图片

也可以合并多个用户的进程数,可以按列分隔它们:

pgrep -c -u user-1,user-2

比如,要查询root 和sagar两个用户的进程:

图片


1.3以不区分大小写的方式搜索进程

默认情况下,pgrep工具是区分大小写的,因此可能无法找到所需的进程,但可以通过使用 -i 选项切换到不区分大小写的模式:

pgrep -i process_name

例如,要查找 firefox 但使用了所有大写字母,它返回了正确的结果:

pgrep -i FIREFOX

图片


1.4列出正在进行的进程及其名称和 PID

如果你想列出每个正在进行的进程及其名称和 PID,可以使用 -l 选项:

pgrep -u username -l

例如,下面列出了与名为 sagar 的用户相关的每个正在进行的进程:

pgrep -u sagar -l

图片


1.5查找用于启动当前进程的命令

pgrep工具还允许用户通过使用 -a 选项查看用于启动当前进程的命令:

pgrep -u username -a

假设正在查找以root用户身份执行的当前进程的命令,那么可以这样操作:

pgrep -u root -a

图片


1.6查找最近启动的进程

如果想查找最近启动的进程,可以使用-n选项轻松找到:

pgrep -n 

也可以将-n-l搭配使用,这样可以获取更有用的输出,因为它还会显示进程名称:

pgrep -n -u sagar -l

图片


1.7查找 Linux 上运行时间最长的进程

如果想查找系统中运行时间最长的进程,pgrep工具可以在使用-o选项时实现这一功能:

pgrep -o

例如,想查找用户(sagar)运行时间最长的进程,可以使用以下命令:

pgrep -u sagar -o -l

图片


2.flock 命令

Linux 中的 flock 命令可以从脚本或命令行管理文件锁,确保一次只有一个进程可以访问文件,从而防止因多个进程同时访问同一文件而导致的数据损坏。

简单来说,flock(文件锁)会锁定文件,使得只有一个进程可以访问该文件,并限制其他进程使用该文件,以防止数据损坏。这种情况通常发生在多个进程尝试使用同一文件时。

下面通过多个示例展示如何使用 flock 命令。

使用 flock 命令时需要遵循的基本语法:

flock [options] file [command]
  • [options]:用于修改 flock 命令的默认行为。

  • file:指定 flock 命令的目标文件。

  • [command]:一个可选参数,用于指定在 flock 获取锁后需要执行的命令。


2.1等待锁被释放(默认行为)

想锁定文件并对其执行命令,但如果锁已经被另一个进程获取了怎么办?等待锁被释放是一个方法。

要实现这一点,不需要任何额外的选项,因为这是 flock 的默认行为,它会等待直到锁被释放。

以下是实现方法:

flock /path/to/file --command "the_actual_command"

为演示这一点,下面并排对同一个文件使用了 flock 命令,因此第一次执行将首先获取锁,同时第二次执行将等待锁被释放。

在一侧使用 sleep 命令,在另一侧使用 echo 命令:

图片

如上图,首先在左侧窗口中执行了 sleep 命令,这意味着锁被占用了 3 秒,与此同时,右侧窗口的命令也被执行了。

因此,echo 命令(在右侧窗口执行)需要等待 3 秒才能执行。


2.2如果文件被锁定,则停止

虽然等待文件锁被释放是一个不错的选择,但有时我们希望快速完成任务。如果文件被锁定,你可能更倾向于改变策略,而不是等待锁被释放。

为此,需要使用以下 -n选项:

flock -n /path/to/file --command "the_actual_command"

以下是目标文件被锁定时的行为方式:

图片

在上面的示例中,左侧窗口的命令锁定了文件 3 秒,而右侧窗口尝试在文件被锁定时访问同一文件。

结果,它没有返回任何内容,并且不会等待文件锁被释放。


2.3使用共享锁

也称为读锁,它允许多个进程同时访问共享资源而不会相互干扰。

当希望允许多个进程读取特定文件但限制写入访问时,这非常有用。

要使用共享锁,可以使用 -s 选项,如下所示:

flock -s /path/to/file <command_to_execute>

作为参考,将在同一时刻使用两次 -s 选项,由于这两个命令都只是尝试读取文件内容,因此它们都会被执行:

图片


2.4解锁文件

虽然锁会自动释放,但有时可能希望手动释放锁以完成任务,为此,你需要使用 -u 选项,如下所示:

flock -u /path/to/file --command "actual_command"

为了演示这一点,对一个文件使用 flock 命令锁定它,然后在另一侧使用 -u 选项来展示如何解锁:

图片

如果没有使用 -u 选项,它将不允许使用该文件。

以下是一个实际示例:

图片

相关文章:

  • Coze与Dify:企业级大模型应用开发认知陷阱与破局之道
  • 什么是深拷贝和浅拷贝?它们有什么区别?
  • PostgreSQL10 物理流复制实战:构建高可用数据库架构!
  • 合成复用原则
  • 信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效
  • 15.14 QLoRA量化低秩适配微调:华盛顿大学的显存优化革命
  • 降维攻击!PCA与随机投影优化高维KNN
  • DA14531 —超低功耗SoC
  • 遗传算法详解及在matlab中的使用
  • 51c大模型~合集48
  • Linux操作系统5-进程信号1(信号基础)
  • 如何安全获取股票实时数据API并在服务器运行?
  • Nacos
  • Angular从入门到精通教程篇章
  • 每日一题-设计食物评分系统,哈希表的有效使用
  • 【MySQL】索引(中)
  • 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局
  • MYSQL表的操作
  • ROS2软件调用架构和机制解析:Publisher创建
  • 上位机知识篇---SSHSCPTFTONFS
  • 电子邮件网络营销方式/爱站网站长seo综合查询
  • 漂亮的幼儿园网站模板/软文广告是什么意思
  • 义乌网站建设成都网站设计/不受限制的搜索引擎
  • 厦门网站建设 智多星/seo推广优化
  • 中企动力做的网站经常打不开/厦门网
  • 秦皇岛网站制作的流程/网站建设公司哪家好