我的winform应用程序由另一个应用程序(父代)启动,我需要确定应用程序的pid,它使用c#启动我的应用程序.
简单的问题,在BASH我试图读取一个.pid文件来杀死一个进程.如何将该文件读入变量.我发现的所有例子都试图阅读许多内容.我只想读取一个只包含PID的文件
#!/bin/sh
PIDFile="/var/run/app_to_kill.pid"
CurPID=(<$PIDFile)
kill -9 $CurPID
Run Code Online (Sandbox Code Playgroud) 这应该很简单,但我只是没有看到它.
如果我有进程ID,我该如何使用它来获取有关进程的信息,例如进程名称.
我写了一个简单的守护进程.这个守护进程应该在我运行任何程序时响应.这该怎么做?在一个大守护进程循环中:
while(1)
{
/* function which catches new programm running */
}
Run Code Online (Sandbox Code Playgroud)
当我运行一个新程序(创建新进程)时,在linux中调用什么函数?
如何在android studio上运行应用程序时打开调试模式.
我的应用程序出现在 - Android Device Monitor- Devices选项卡上.当我在此屏幕上单击应用程序行时,调试图标未激活
运行我的应用程序后如何进入调试模式?
我想检查PID是否正在运行(即存在并且没有被僵尸).
它真的很快,/proc/$PID/stat但我想要一些更便携的东西.
我现在最好的是:
( STAT="$(ps -ostat= -p$PID)"; test "$STAT" -a "$STAT" "!=" "Z" )
Run Code Online (Sandbox Code Playgroud)
这似乎适用于BSD和Linux.有没有更好的办法?
我正在写一个Python脚本,可能会或可能不会(取决于一堆东西)运行很长时间,我想确保多个实例(通过cron启动)不会踩到彼此脚趾.这样做的逻辑方法似乎是基于PID的锁文件...但是如果已经有代码执行此操作,我不想重新发明轮子.
那么,是否有一个Python模块可以管理基于PID的锁文件的细节?
我们使用Celery和我们的Django webapp来管理离线任务; 其中一些任务可以运行长达120秒.
每当我们进行任何代码修改时,我们都需要重新启动Celery以重新加载新的Python代码.我们当前的解决方案是将SIGTERM发送到主Celery进程(kill -s 15 `cat /var/run/celeryd.pid`),然后等待它死并重新启动它(python manage.py celeryd --pidfile=/var/run/celeryd.pid [...]).
由于长时间运行的任务,这通常意味着关闭将花费一两分钟,在此期间不会处理任何新任务,从而导致当前站点上的用户显着延迟.我正在寻找一种方法告诉Celery关闭,但随后立即启动一个新的Celery实例来开始运行新任务.
事情并没有工作:
ERROR: Pidfile (/var/run/celeryd.pid) already exists. Seems we're already running? (PID: 13214)立即抱怨并死亡.(这看起来像芹菜本身的一个错误;我让他们知道它.)当我启动一个docker容器时,它失败了,因为现有的pid文件:
[root@newhope sergio]# docker logs sharp_shockley
httpd (pid 1) already running
httpd (pid 1) already running
httpd (pid 1) already running
httpd (pid 1) already running
Run Code Online (Sandbox Code Playgroud)
如何删除这样的文件,因为我找不到它.
[root@newhope sergio]# docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8/1.4.1
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8/1.4.1
[root@newhope sergio]# find / -name "httpd.pid"
find: ‘/run/user/1000/gvfs’: Permiso denegado
Run Code Online (Sandbox Code Playgroud) 我正在使用此代码启动可执行文件:
Process proc = new Process();
proc.StartInfo.FileName = executablePath;
proc.Start();
proc.WaitForInputIdle();
Run Code Online (Sandbox Code Playgroud)
在这个调用之后proc.Id它给了我一些整数,这不是真正的进程ID.在任务管理器中,此进程还有另一个ID,我也使用MS UI Automation访问此应用程序,该应用程序也返回与任务管理器中相同的ID.所以我的问题是如何获得启动过程的真实进程ID?
UPDATE
我发现在Windows 7上它工作正常并返回正确的ID,但不是在Windows XP上.可能是什么原因?
情景
该应用程序的场景如下.我有一个正在运行的嵌入式HTTP服务器,它不是由我实现的(这里是源代码).客户端连接到Web服务器并发送运行程序的请求.在我的服务器的请求处理程序中,我只是Process.start()用来启动请求的应用程序.作为Web服务器,程序为连接到它的每个客户端会话创建线程(我假设如此,因为我没有写它).这可以以某种方式帮助识别问题,因为它只存在于Windows XP X86 Service Pack 3上吗?