gpt4 book ai didi

c - 当没有 TTY 存在时,守护进程生成的进程会终止

转载 作者:行者123 更新时间:2023-11-30 16:22:09 24 4
gpt4 key购买 nike

我需要启动从我的 openwrt 系统到我的云计算机的反向 ssh 隧道。openwrt 系统上的应用程序将在启动时作为守护进程运行。当它通过网络接收到特定代码时,它应该生成一个启动远程 ssh 隧道的进程。系统中不会有任何登录。

我正在使用以下代码来执行此操作。

   int spawn_orphan(char* cmd)
{
char command[1024]; // We could segfault if cmd is longer than 1000 bytes or so
int pid;
int Stat;
pid = fork();
if (pid < 0)
{
perror("FORK FAILED\n");
return pid;
}
if (pid == 0)
{ // CHILD
setsid(); // Make this process the session leader of a new session
pid = fork();
if (pid < 0)
{
printf("FORK FAILED\n");
return ( 1 );
}
if (pid == 0)
{ // GRANDCHILD
sprintf(command, "ash -c '%s'", cmd);
execl("/bin/ash", "ash", "-c", command, NULL); // Only returns on error
perror("execl failed");
return ( 1 );
}
exit(0); // SUCCESS (This child is reaped below with waitpid())
}

// Reap the child, leaving the grandchild to be inherited by init
waitpid(pid, &Stat, 0);
if ( WIFEXITED(Stat) && ( WEXITSTATUS(Stat) == 0 ))
{
printf("dbclient exit\n");
return 0; // Child forked and exited successfully
}
else
{
perror("failed to spawn orphan\n");
return 1;
}
}

这是我的调用函数

uint8_t rdsService(uint8_t state)
{



char buffer[1024];

uint8_t retVal;
if(state )
{
retVal = spawn_orphan("dbclient -f -K -I -T -N -R 1500:localhost:22 -p 22 username@HOSTMACHINE -i ~/ctusr/keys/X1_ID_RSA -y");


}
else
{


retVal = spawn_orphan("ash -c 'killall dbclient'");


}

return retVal;

}

如果我从控制台运行我的父应用程序,该应用程序能够生成 dbclient,并且我能够通过反向 ssh 进入系统。

当我将父应用程序作为守护进程运行时,就会出现问题,在这种情况下,应用程序会生成 dbclient,当我在控制台上执行“ps”时,我可以看到它,但几秒钟后,dbclient 就会被终止。

我已经尝试使用“nohup”运行 dbclient

nohup dbclient -f -K -I -T -N -R 1500:localhost:22 -p 22 Username@machine-i ~/ctusr/keys/X1_ID_RSA -y &

当我从控制台运行应用程序时工作正常,但当应用程序作为 Daemon 运行时出现相同的错误。

感谢帮助

最佳答案

直到今天我也遇到了同样的问题一个月,我的项目只有一点点不同,那就是我使用 shell 脚本来打开 ash,而不是使用 c 编译的程序。我想您正在使用 proc 脚本在启动过程后运行您的逻辑,如果是这样,我的提示可能会有用。在 procd 脚本中,我将 home 添加为环境变量,这解决了我的问题。我知道一年过去了,您可能已经找到了替代解决方案,但我仍然希望此评论对其他人有用。祝你有美好的一天。

关于c - 当没有 TTY 存在时,守护进程生成的进程会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54547081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com