C 查询服务是否正在运行
如何在C中查询服务(dnsmasq)是否正在运行?根据,默认情况下,它会将pid文件写入C 查询服务是否正在运行,c,linux,service,dnsmasq,C,Linux,Service,Dnsmasq,如何在C中查询服务(dnsmasq)是否正在运行?根据,默认情况下,它会将pid文件写入/var/run/dnsmasq.pid。此文件将是一个文本文件,其中包含一个表示进程ID的整数。打开该文件,读取该整数,然后调用kill(pid,0),查看进程在该pid处是否处于活动状态。(虽然检查PID是否存在并不能保证找不到以该PID运行的其他进程,但通常已经足够了。)如果我执行kill(PID,0)一旦我阅读了pid,结果是否会是它存在的0,而不是-1?有趣的是,虽然这是真的,但我的经验不同。这是因
/var/run/dnsmasq.pid
。此文件将是一个文本文件,其中包含一个表示进程ID的整数。打开该文件,读取该整数,然后调用kill(pid,0)
,查看进程在该pid处是否处于活动状态。(虽然检查PID是否存在并不能保证找不到以该PID运行的其他进程,但通常已经足够了。)如果我执行kill(PID,0)
一旦我阅读了pid,结果是否会是它存在的0
,而不是-1
?有趣的是,虽然这是真的,但我的经验不同。这是因为我不是根。正如所料,如果它没有运行,调用kill(pid,0)
将返回-1
,errno
是ESRCH
。但是,如果它正在运行,它仍然返回-1
,errno
是EPERM
。当作为root时,当发送空白信号时,运行的dnsmasq将根据您的回答返回0
。