linux如何看到文件是被哪个进程创建的
时间: 2024-03-13 16:43:25 浏览: 528
你可以使用 `lsof` 命令来查看文件被哪个进程打开或者被哪个进程创建。
如果你知道文件的路径,那么可以直接使用下面的命令来查看:
```
lsof /path/to/file
```
执行命令后,你将会看到输出中包含了和这个文件相关的进程信息。其中,第一列是进程名,第二列是进程 ID,第三列是用户,第四列是文件描述符,第五列是文件类型,第六列是文件名。
如果你只是想查看某个文件是否被打开,可以使用 `-t` 参数来只输出进程 ID,例如:
```
lsof -t /path/to/file
```
这样会输出这个文件所关联的进程 ID。
相关问题
linux下如何查询某个文件何时被什么进程创建的
在 Linux 中,如果你想查询某个文件何时被创建,可以通过以下几种方式来实现:
1. 使用 `stat` 命令来查看文件的元数据信息:
```
stat filename
```
执行该命令后,你可以看到包括文件的创建时间在内的所有元数据信息。
2. 使用 `auditd` 工具进行审计:
```
sudo auditctl -w /path/to/file -p w -k file-creation
sudo ausearch -k file-creation -i /path/to/file
```
第一行命令将 `/path/to/file` 文件添加到审计规则中,以便记录该文件的创建、修改、删除等操作。第二行命令用于查看 `/path/to/file` 文件的审计日志信息,其中 `-i` 参数用于显示详细信息。
3. 使用 `inotifywait` 工具进行监控:
```
sudo inotifywait -m -e create /path/to/file
```
该命令将监控 `/path/to/file` 目录下的文件创建事件,并在文件创建时输出相关信息。
如果你想查询某个进程何时创建了某个文件,可以使用 `ps` 命令查看进程启动时间,然后再和文件的创建时间进行比较。例如,要查看进程 ID 为 `1234` 的进程启动时间,可以运行以下命令:
```
ps -p 1234 -o lstart
```
执行命令后,你将会看到进程启动的时间。然后你可以使用 `stat` 命令查看文件的创建时间,以此来比较进程启动时间和文件创建时间。
linux内核源码进程创建解析
在 Linux 内核中,进程的创建是通过 `clone()` 系统调用实现的,`clone()` 调用会创建一个新的进程,该进程与调用进程共享代码和数据段,但会有独立的用户栈和进程 ID。
在 `clone()` 调用中,使用了一个参数 `clone_flags` 来指定创建进程的行为,例如:
- `CLONE_VM`:共享代码和数据段;
- `CLONE_FS`:共享文件系统信息;
- `CLONE_FILES`:共享文件描述符表;
- `CLONE_SIGHAND`:共享信号处理器表;
- `CLONE_NEWPID`:为新进程创建一个新的 PID 命名空间。
在 `clone()` 调用中,会调用 `do_fork()` 函数来创建新的进程,该函数会调用 `copy_process()` 函数来复制进程的内存结构,并创建一个新的进程描述符。
在 `copy_process()` 函数中,会分别复制进程的内核栈、用户栈、文件描述符表、信号处理器表等信息,并设置新进程的状态。最后,调用 `wake_up_new_task()` 函数来唤醒新创建的进程。
在新创建的进程中,会执行 `fork()` 系统调用返回的值,如果返回 0,则表示该进程为子进程,否则为父进程。子进程会从 `fork()` 调用的位置继续执行,而父进程则会返回新创建的进程 ID。
总之,Linux 内核中的进程创建过程是通过 `clone()` 系统调用实现的,该调用会创建一个新的进程,并复制进程的内存结构,最终唤醒新创建的进程。