Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何识别哪个守护进程正在写入文件_Unix_Process_Operating System_Daemon - Fatal编程技术网

Unix 如何识别哪个守护进程正在写入文件

Unix 如何识别哪个守护进程正在写入文件,unix,process,operating-system,daemon,Unix,Process,Operating System,Daemon,我需要识别定期写入日志文件的守护进程。问题是我不知道哪一个流程在做这项工作,我需要在明天之前向客户展示一些进展。有人有线索吗 我已经在PPID的帮助下整理了系统中运行的守护进程。任何帮助都将不胜感激 此外,我认为守护进程可能(很少)不将PPID设置为1。那么我们怎么才能找到它呢?lsof给出了一个进程中打开的文件列表。 因此,lsof | grep应该对您有所帮助。在日志文件中尝试该命令,它将显示使用它的进程的PID 例如: $ fuser file.log file.log: 3065 您

我需要识别定期写入日志文件的守护进程。问题是我不知道哪一个流程在做这项工作,我需要在明天之前向客户展示一些进展。有人有线索吗

我已经在PPID的帮助下整理了系统中运行的守护进程。任何帮助都将不胜感激


此外,我认为守护进程可能(很少)不将PPID设置为1。那么我们怎么才能找到它呢?

lsof
给出了一个进程中打开的文件列表。 因此,
lsof | grep
应该对您有所帮助。

在日志文件中尝试该命令,它将显示使用它的进程的PID

例如:

$ fuser file.log
file.log:  3065
您可以使用auditctl

# sudo apt-get install auditd
# sudo /sbin/auditctl -w /path/to/file  -p war -k hosts-file
-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.
# sudo /sbin/ausearch -f /path/to/file | more
给出输出,例如

类型=未知[1327]消息=审计(1459766547.822:130):proctitle=2f7573722f7362696e2f61706163686532002d6b07374617274 type=PATH msg=audit(1459766547.822:130):item=0 name=“/PATH/to/file”inode=141561 dev=08:00 mode=0100444 ouid=33 ogid=33 rdev=00:00 nametype=NORMAL type=CWD msg=audit(1459766547.822:130):CWD=“/” type=SYSCALL msg=audit(1459766547.822:130):arch=c000003e SYSCALL=2 success=yes exit=41 a0=7f3c2304cd0 a1=80000 a2=1b6 a3=8项=1 ppid=24452 pid=6797 auid=42949672
95 uid=33 gid=33 euid=33 suid=33 fsuid=33 egid=33 sgid=33 fsgid=33 tty=(无)ses=4294967295 comm=“apache2”exe=“/usr/sbin/apache2”key=“hosts file”

但这不是只有在进程保持文件打开时才有效吗?如果进程仅在写入数据时打开文件会怎样?如果您不知道进程何时写入日志,可以使用
watch
定期执行
fuser
。e、 g.
watch fuser file.log
。这是可能的,好吧。。我试试看。问题是我没有写权限,因此无法将watch的输出重定向到任何文件。让我们看看能做些什么。多谢各位。dogbane的评论很好——但watch并不能在所有UNIX实现中都起作用。我们谈论的是什么确切的操作系统?如果您没有
watch
,您可以在
循环中调用
fuser
。显然,我的客户端安装的系统中没有lsof。Solaris 8.
sudo/sbin/auditctl-D
在关闭时关闭。这是一个!显然,
lsof
fuser
如果文件是以非常短的突发写入的,那么即使在一个while循环中,打开文件也要花费很长时间。