Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在守护进程初始化中添加延迟,是否会影响其他守护进程在启动时的加载方式? 我开发了C++中的守护进程,其主要代码如下: if ((ret = daemonize(daemonpath, daemonpid)) == -1) { syslog(LOG_INFO, "Ejecutando daemon"); Reader reader(bSearch); reader.StartAsync(); while (!exitdaemon) { } reader.StopAsync(); daemonShutdown(); }_C++_Linux_Daemon - Fatal编程技术网

如果在守护进程初始化中添加延迟,是否会影响其他守护进程在启动时的加载方式? 我开发了C++中的守护进程,其主要代码如下: if ((ret = daemonize(daemonpath, daemonpid)) == -1) { syslog(LOG_INFO, "Ejecutando daemon"); Reader reader(bSearch); reader.StartAsync(); while (!exitdaemon) { } reader.StopAsync(); daemonShutdown(); }

如果在守护进程初始化中添加延迟,是否会影响其他守护进程在启动时的加载方式? 我开发了C++中的守护进程,其主要代码如下: if ((ret = daemonize(daemonpath, daemonpid)) == -1) { syslog(LOG_INFO, "Ejecutando daemon"); Reader reader(bSearch); reader.StartAsync(); while (!exitdaemon) { } reader.StopAsync(); daemonShutdown(); },c++,linux,daemon,C++,Linux,Daemon,“daemonize”方法完成了创建守护进程的所有工作(执行fork、创建PID等),因此它与问题无关,因为它是创建守护进程的标准代码 这个守护进程工作得很好,但是当我配置系统在引导时加载我的守护进程时,它会与其他守护进程发生冲突。事实上,另一个守护进程初始化我的守护进程使用的某些硬件。因此,我需要比另一个守护进程晚几秒钟启动我的守护进程 如果在If语句后添加usleep(5000000)调用,是否会影响系统中其他守护进程的延迟 我认为它不应该产生影响,因为“daemonize”方法执行fork

“daemonize”方法完成了创建守护进程的所有工作(执行fork、创建PID等),因此它与问题无关,因为它是创建守护进程的标准代码

这个守护进程工作得很好,但是当我配置系统在引导时加载我的守护进程时,它会与其他守护进程发生冲突。事实上,另一个守护进程初始化我的守护进程使用的某些硬件。因此,我需要比另一个守护进程晚几秒钟启动我的守护进程

如果在
If
语句后添加
usleep(5000000)
调用,是否会影响系统中其他守护进程的延迟

我认为它不应该产生影响,因为“daemonize”方法执行fork,因此会启动此进程的一个副本,主进程的其余部分在“if”语句之后正常继续


您能确认这是否属实吗?

daemonize()
将阻止您的守护进程阻塞其他进程,但无法保证5000000(或任何数量的)硬编码延迟将足够长,以确保在您尝试使用硬件之前正确初始化硬件。您最好立即尝试使用硬件,如果发现无法使用(因为硬件未初始化),则需要先休眠一两秒钟,然后重试(并根据需要重复,直到硬件可用为止)。如果您的守护进程是服务,为什么不将另一个守护进程设置为依赖项,以便在另一个守护进程启动之前它不会启动?不确定这是否适用于您的案例,但有些东西可能对您的案例有用。谢谢@JeremyFriesner。我理解你的观点,你是对的。但是,实际的问题是,两个守护进程都试图同时使用硬件,导致硬件被阻塞。当这种情况发生时,一旦进入SSH控制台,我需要关闭我的守护进程。。。然后,硬件被解锁。顺便说一句,这不是一台电脑,而是一个RFID天线,我所看到的,用5秒钟就足够了。这就是为什么我问我是否在if之后添加延迟,分叉进程将等待,但主进程将返回,因此,所有其他守护进程都应在没有该延迟的情况下启动。@LarryB我看到我可以在sh脚本中的“Required start:$local_fs$syslog”行中添加服务。。。但是,如何获取另一个守护进程名称?sh文件的名称是否用于启动它?守护进程是否通过文件系统上的文件访问硬件?如果是,那么您可能可以使用
lsof
来确定哪个进程正在访问这些文件。
daemonize()
将阻止您的守护进程阻塞其他进程,但无法保证硬编码延迟5000000(或任何数量,真的)将足够长,以确保在尝试使用硬件之前正确初始化硬件。您最好立即尝试使用硬件,如果发现无法使用(因为硬件未初始化),则需要先休眠一两秒钟,然后重试(并根据需要重复,直到硬件可用为止)。如果您的守护进程是服务,为什么不将另一个守护进程设置为依赖项,以便在另一个守护进程启动之前它不会启动?不确定这是否适用于您的案例,但有些东西可能对您的案例有用。谢谢@JeremyFriesner。我理解你的观点,你是对的。但是,实际的问题是,两个守护进程都试图同时使用硬件,导致硬件被阻塞。当这种情况发生时,一旦进入SSH控制台,我需要关闭我的守护进程。。。然后,硬件被解锁。顺便说一句,这不是一台电脑,而是一个RFID天线,我所看到的,用5秒钟就足够了。这就是为什么我问我是否在if之后添加延迟,分叉进程将等待,但主进程将返回,因此,所有其他守护进程都应在没有该延迟的情况下启动。@LarryB我看到我可以在sh脚本中的“Required start:$local_fs$syslog”行中添加服务。。。但是,如何获取另一个守护进程名称?sh文件的名称是否用于启动它?守护进程是否通过文件系统上的文件访问硬件?如果是,则可以使用
lsof
来确定哪个进程正在访问这些文件。