我想在 Unix 的远程机器上将程序作为守护进程运行。我有 rsh 连接,我希望程序在断开连接后运行。
假设我有两个程序:util.cpp 和 forker.cpp。
util.cpp 是一些实用程序,为了我们的目的,让它只是无限根。
实用程序.cpp
int main() {
while (true) {};
return 0;
}
forker.cpp 获取一些程序并通过 fork() 和 execve() 在单独的进程中运行它:
叉子.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.
天呐!