我想在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