Bash Shell脚本:如何获取使用文件系统/目录的所有进程Id
我正在检查使用文件系统的进程。现在,当我做fuser时,有数百个进程即将到来Bash Shell脚本:如何获取使用文件系统/目录的所有进程Id,bash,shell,Bash,Shell,我正在检查使用文件系统的进程。现在,当我做fuser时,有数百个进程即将到来 fuser -cu /xyz 输出被截断: 393ce(xyz) 1044c(root) 1068cm(oracle) 2065ce(xyz) 3729ce(xyz) 我只需要文件中用换行符分隔的进程id,这样我就可以运行循环来检查进程。如果您只需要id而不是id(用户),那么不要使用-u选项。定影器-u的文档记录: -u、 --用户 将进程所有者的用户名附加到每个PID 对我来说,fuser-c/的格式与
fuser -cu /xyz
输出被截断:
393ce(xyz) 1044c(root) 1068cm(oracle) 2065ce(xyz) 3729ce(xyz)
我只需要文件中用换行符分隔的进程id,这样我就可以运行循环来检查进程。如果您只需要
id
而不是id(用户)
,那么不要使用-u
选项。定影器-u的文档记录:
-u、 --用户
将进程所有者的用户名附加到每个PID
对我来说,fuser-c/
的格式与您的示例不同。每个id后面都有表示访问类型的字母。这些字母被打印到stderr
,因此我将使用2>和-
来隐藏它们
$ fuser -c /
/: 1717rce 1754rce 1765rce 1785rce ...
$ fuser -c / 2>&-
1717 1754 1765 1785 ...
您可以使用grep
每行打印一个id:
$ fuser -c / 2>&- | grep -o '[0-9]*'
1717
1754
1765
1785
...
但是,要运行循环,不需要每行一个id。由空格分隔的ID也起作用:
for id in $(fuser -c / 2>&-); do
echo "id = $id"
done
如果您只想要id
而不想要id(user)
,则不要使用-u
选项。定影器-u的文档记录:
-u、 --用户
将进程所有者的用户名附加到每个PID
对我来说,fuser-c/
的格式与您的示例不同。每个id后面都有表示访问类型的字母。这些字母被打印到stderr
,因此我将使用2>和-
来隐藏它们
$ fuser -c /
/: 1717rce 1754rce 1765rce 1785rce ...
$ fuser -c / 2>&-
1717 1754 1765 1785 ...
您可以使用grep
每行打印一个id:
$ fuser -c / 2>&- | grep -o '[0-9]*'
1717
1754
1765
1785
...
但是,要运行循环,不需要每行一个id。由空格分隔的ID也起作用:
for id in $(fuser -c / 2>&-); do
echo "id = $id"
done
当然,在最后一种情况下也不需要循环printf'id=%s\n'$(fuser-c/2>&-
@tripleee我知道。循环只是为了证明for
循环是通过分词而不是通过读行来工作的。OP说»这样我就可以运行一个循环«<代码>回音
只是一个占位符。我认为OP会做一些不同于在循环内打印的事情。@Socowi很好当然,在最后一种情况下,你也不需要循环printf'id=%s\n'$(fuser-c/2>&-
@tripleee我知道。循环只是为了证明for
循环是通过分词而不是通过读行来工作的。OP说»这样我就可以运行一个循环«<代码>回音
只是一个占位符。我认为OP会做一些不同的事情,而不仅仅是在循环内部打印。@Socowi很好的一个