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

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 选项,它将不允许使用该文件。

以下是一个实际示例:

图片


http://www.kler.cn/a/566231.html

相关文章:

  • LeetCode 热门100题-矩阵置零
  • BIO、NIO、AIO解析
  • TORGO 数据库:构音障碍语音研究的宝贵资源
  • 深入探索Python机器学习算法:监督学习(线性回归,逻辑回归,决策树与随机森林,支持向量机,K近邻算法)
  • Android ViewStub延迟初始化加载布局View,Kotlin
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(7)
  • 地弹与振铃
  • 1-6静态库和动态库
  • 解释Promise的工作原理及其状态
  • windows上执行scp命令
  • DMA发送全部历史记录数据到串口
  • Spring全家桶简介
  • Blender调整最佳渲染清晰度
  • 如何配置虚拟机的IP上网
  • 纯代码实战--用Deepseek+SQLite+Ollama搭建数据库助手
  • yolo位姿估计实验
  • idea不同的项目使用不同的java版本
  • Linux操作系统5-进程信号2(信号的4种产生方式,signal系统调用)
  • 【Linux网络编程】五种IO模型 多路转接(select)
  • Windows文件资源管理器左侧导航窗格没有WSL的Linux图标的解决方法