有没有简单的方法来确定某个过程是否正在运行? 我需要知道我的程序的一个实例是否在后台运行,如果不是fork并创建后台进程。确定进程是否正在运行?
1
A
回答
0
这通常使用pidfiles完成:/var/run/[name].pid中的文件只包含由fork()返回的进程ID。
if pidfile exists: exit() else: create pidfile pid = start_background() pidfile.write(pid) On shutdown: remove pidfile
5
通常情况下这样做的自由种族的方式是:
- 打开锁文件/写PID文件(但不截断它)
- 尝试上采取的排它锁它(使用fcntl或flock)不会被阻塞
- 如果使用EAGAIN失败,那么其他进程已经在运行。
- 文件描述符现在应该已经为守护被继承和保持开放其使用寿命
这样做了简单的存储PID的优点是,如果有人重复使用PID,你不会得到一个假阳性。
在文件中存储pid最大的问题是系统启动守护进程使用的低编号的pid可能会被其他守护进程重新引导重用。我看到过这种情况。
0
Linux软件,目前为止大并不关心关于程序的排他性,只有他们使用的资源。 “关怀”通常由实施提供(例如,发行基础设施)。例如,如果你想运行一个程序,但该程序锁定或变成僵尸,你无法杀死它,或者它作为一个不同的用户执行其他功能运行。程序为什么要关心另一个副本是否正在运行?这样做似乎只是一种不必要的限制。
如果它是一个打开套接字(如TCP端口)的进程,如果程序无法打开套接字,程序将失败。如果它需要对文件进行独占访问,如果它无法获取,请将其失败。支持PID文件,但不要强制执行。
你会在GNU软件中看到这种方法,这是使它如此多才多艺的一部分。
相关问题
- 1. 检查进程是否正在运行
- 2. 如何确定.NET代码是否在ASP.NET进程中运行?
- 3. WINSDK:确定任意pid是否标识Windows上正在运行的进程
- 4. 如何以编程方式确定ehcache是否正在运行?
- 5. 以编程方式确定IIS站点是否正在运行
- 6. VBS如何确定程序是否正在运行
- 7. 检查进程是否正在运行(使用进程名称)
- 8. Process Class是否可用于确定进程是否已在运行?
- 9. 如何确定进程是否已成功运行命令c#
- 10. 确定一个进程是否按命令名运行
- 11. 确定一个可执行文件是否正在运行
- 12. 如何确定当前运行的进程是否为父进程?
- 13. 通过Shell脚本确定Linux进程是否在给定参数下运行
- 14. 如何检查正在运行的进程是否是后台进程?
- 15. 重定向正在运行的进程
- 16. 绑定而进程正在运行(WPF)
- 17. 确定线程是否正在睡眠
- 18. 确定我的进程正在运行,为
- 19. 确定程序是否在远程桌面上运行
- 20. 确定应用程序是否在远程系统上运行
- 21. 子进程是否总是在父进程内运行?是否...线程...?
- 22. 确定回调是否正在进行(DevExpress)
- 23. 如何确定一台机器是否正在运行Active Directory
- 24. 如何确定我的python脚本是否正在运行?
- 25. 如何确定PHPUnit测试是否正在运行?
- 26. 确定服务在启动时是否正在运行,因为它是自己的进程?
- 27. 检查程序是否正在运行
- 28. Bash脚本检查进程是否正在运行
- 29. Winforms控件,指示是否单个进程正在运行
- 30. 如何查看gradle守护进程是否正在运行?
我没有看到该文件夹中的许多pid文件,很多都丢失了。还有其他地方吗? – Blackbinary 2011-03-05 20:16:28
这就是系统pidfiles根据[FHS](http://www.pathname.com/fhs/2.2/fhs-5.13.html)放置的位置。 如果您正在编写用户级程序,可以将pidfile放在用户的主目录(〜/。[name]/[name] .pid)中。 – i80and 2011-03-05 20:26:00
这种方法引入了一个竞争条件,对吧? – Vlad 2011-03-05 20:28:40