我想在Unix的远程机器上运行程序作为守护进程。我有rsh连接,我希望程序在断开连接后运行。通过rsh运行守护进程
假设我有两个程序:util.cpp和forker.cpp。
util.cpp是一些实用工具,为了我们的目的让它成为无限根。
util.cpp
int main() {
while (true) {};
return 0;
}
forker.cpp需要一些程序和在过程separe通过fork()和execve的()中运行:
forker.cpp
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv) {
if (argc != 2) {
printf("./a.out <program_to_fork>\n");
exit(1);
}
pid_t pid;
if ((pid = fork()) < 0) {
perror("fork error.");
exit(1);
} else if (!pid) {
// Child.
if (execve(argv[1], &(argv[1]), NULL) == -1) {
perror("execve error.");
exit(1);
}
} else {
// Parent: do nothing.
}
return 0;
}
如果我运行:
./forker util
forker完成得非常快,并且bash'没有暂停',并且util作为守护程序运行。
但是,如果我运行:
scp forker remote_server://some_path/
scp program remote_server://some_path/
rsh remote_server 'cd /some_path; ./forker program'
那么它是所有相同(即在remote_sever forker迅速完成,UTIL运行),但我在本地机器上的bash暂停。 它正在等待util停止(我检查了它,如果util.cpp返回,它就没事了),但我不明白为什么?!
有两个问题:
1) Why is it paused when I run it through rsh?
我确信,我选择了一些愚蠢的方式来运行的守护进程。所以
2) How to run some program as daemon in C/C++ in unix-like platforms.
Tnx!
线轮,RSH REMOTE_HOST” ./forker方案>的/ dev/null的2>的/ dev/null dev/null'解决了它。你能告诉我什么是“ dev/null&”吗? – Max 2010-04-28 17:30:37
关于第二个问题,我认为你的意思是nohup ./program,而不是nohup ./forker程序。无论如何,nohup在程序运行之前不会返回。这就是为什么我需要沃克。如果您在服务器上执行rsh命令并在那之后写入'nohup ./program',如果关闭会话,程序仍在运行。但是,如果您尝试运行'rsh服务器'nohup ./program'',那么它又暂停了。如果你按下ctrl-c,程序正在停止。无论如何,我对第一个问题感兴趣。 – Max 2010-04-28 17:39:17
' dev/null'将'stdin'重定向到'/ dev/null'并且'&'在后台启动了进程 – jschmier 2010-04-28 17:42:26