- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
关于 fork()
有很多问题,但我对这段代码有点困惑。我正在用 c++ 分析一段代码,因为我得到了这个函数。
int daemon(int nochdir, int noclose)
{
switch (fork())
{
case 0: break;
case -1: return -1;
default: _exit(0); /* exit the original process */
}
if (setsid() < 0) /* shoudn't fail */
return -1;
/* dyke out this switch if you want to acquire a control tty in */
/* the future -- not normally advisable for daemons */
printf("Starting %s [ OK ]\n",AGENT_NAME);
switch (fork())
{
case 0: break;
case -1: return -1;
default: _exit(0);
}
if (!nochdir)
{
chdir("/");
}
if (!noclose)
{
dup(0);
dup(1);
}
return 0;
}
因此,fork 将从调用 fork()
的位置创建代码的精确拷贝。所以,
switch是执行两次还是一次?
如果是两次,那么在切换中如果 child 先执行怎么办?它会中断还是转到其他语句?
如果父级执行怎么办?主进程会终止,子进程会继续吗?
编辑:因此,开关也将运行两次,一次与父级一起运行,一次与子级一起运行。并对返回值进行操作。
最后一点是,守护进程是一个预定义的函数,它已被重新定义并像用户创建的守护进程一样使用。它将如何创建守护进程以及什么
`if (!nochdir)
{
chdir("/");
}`
和
if (!noclose)
{
dup(0);
dup(1);
}
我是这样调用这个函数的。
if (daemon(0, 0) < 0)
{
printf("Starting %s [ Failed ]\n",AGENT_NAME);
exit(2);
}
最佳答案
Is switch executed twice or once?
据说fork是调用一次返回两次的函数,即每个进程一次:父进程一次,子进程一次。
男人:
On success, the PID of the child process is returned in the parent, and 0 is returned in the child. On failure, -1 is returned in the parent, no child process is created, and errno is set appropriately
它可能只返回一次 (-1):如果未创建子项,则仅在父项中返回。它总是在父级中返回(错误时返回 -1,成功时返回 > 0)。
If twice then in the switch what if the child executes first? Will it just break or go to the other statements?
未知是 child 还是 parent 先返回。在 fork() 之后,所有内存段都被复制到子进程中,但它继续使用从 fork() 返回的正确值 0。 parent 继续使用 child 的 pid。您在代码中使用 fork 的返回值来确定您是 child 还是 parent 。如果你这样写代码,也许这会变得更清楚
int daemon( int nochdir, int noclose)
{
pid_t pid; /* to drive logic in the code */
if ( ( pid = Fork()) < 0) /* fork and remember actual value returned to pid */
return -1;
if( pid > 0)
_exit(0); /* exit the original process */
// here pid is 0, i.e. the child
What If the parent executes? will the main process be terminated and child will continue?
如果在任何子指令之前调用父 exit() 怎么办?那么是的, parent 会终止, child 会自己做。父进程和子进程拥有相同的代码段,但彼此独立执行(除非您添加了一些同步)。
关于c++ - 使用 _exit() 在守护进程中进行 fork() 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424605/
一 点睛 线程可以设置为守护线程,ThreadGroup 也可以设置为守护 ThreadGroup,但是若将一个 ThreadGroup 设置为 deamon,也并不会影响线程的 daemon 属性,
我有一个 python 脚本需要在启动时作为守护进程运行。进程从 tty(和 pdb)分离,但代码不运行。 我已经将它缩小到一个最小的例子 import daemon from time import
reactjs isMounted API 的文档提到: You can use this method to guard asynchronous calls to setState() or fo
我正在开发一个需要嵌入 HTTP 服务器的守护进程。我正在尝试使用 BaseHTTPServer 来完成它,当我在前台运行它时,它工作正常,但是当我尝试将守护进程 fork 到后台时,它停止工作。我的
我正在尝试使用 Apache Commons Daemon 使用 Daemon 接口(interface)来守护我的应用程序。 Java 应用程序本身不执行任何操作,只是写入 stout。 我编译了j
我正在使用 Bootle Python Web Framework 在 Ubuntu 上开发网络应用程序。是否有任何有效的方法来守护启动默认 bottlepy 网络服务器的脚本? 谢谢。 UPD:现在
我一直使用 bluepill成功地守护简单的 Ruby 脚本。然而这一次,我有一个脚本,它也在加载 Rails 环境,因此我可以访问 Rails 应用程序及其各自模型的数据库连接。我使用的 bluep
我试图守护一些代码,但我遇到了一些麻烦。 如果我用 tklogger() 调用代码,它运行得很好。但是,如果我在守护程序上下文中调用它,我会得到以下跟踪信息: Traceback (most rece
我打算使用 systemd 将 celery 4.3.0 作为守护进程运行,但它给了我这个错误: 它会启动 worker 但会很快停止它们。但是,我可以通过键入以下命令手动运行工作人员: celery
我是一名优秀的程序员,十分优秀!