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
选项,它将不允许使用该文件。以下是一个实际示例:
8个Linux进程管理命令详解及示例(三):pgrep和flock命令
独行soc2025-03-01 15:49
相关推荐