有没有简单的方法来确定某个过程是否正在运行? 我需要知道我的程序的一个实例是否在后台运行,如果不是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. Python,确定Unix进程是否正在运行的正确方法是什么?
- 2. 确定作业是否正在运行
- 3. Linux进程是否正在运行?
- 4. 检查进程是否正在运行
- 5. 检查进程是否正在运行
- 6. 进程运行不正确
- 7. 确定进程是否在lxc/Docker中运行
- 8. 如何确定.NET代码是否在ASP.NET进程中运行?
- 9. WINSDK:确定任意pid是否标识Windows上正在运行的进程
- 10. 如何确定Linux进程记帐(accton)当前是否正在运行?
- 11. 如何以编程方式确定ehcache是否正在运行?
- 12. 如何确定应用程序是否正在运行?
- 13. VBS如何确定程序是否正在运行
- 14. 以编程方式确定IIS站点是否正在运行
- 15. C++检查特定进程是否正在运行
- 16. 检查进程是否正在运行(使用进程名称)
- 17. 如何确保正在运行的进程正在运行?
- 18. Process Class是否可用于确定进程是否已在运行?
- 19. 如何确定进程是否已成功运行命令c#
- 20. 确定一个进程是否按命令名运行
- 21. 确定瘦服务器是否作为守护进程运行
- 22. 安装.pkg:确定正在更新的应用程序是否正在运行?
- 23. 确定当前进程是否在WOW64中运行或不在执行
- 24. 确定一个可执行文件是否正在运行
- 25. 如何确定当前运行的进程是否为父进程?
- 26. 检测Windows进程和应用程序是否正在运行
- 27. 通过Shell脚本确定Linux进程是否在给定参数下运行
- 28. 确定PyQt是否在Maya中运行
- 29. 如何确定一个进程是由进程名运行
- 30. 如何检查正在运行的进程是否是后台进程?
我没有看到该文件夹中的许多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