Unixのリモートマシンでデーモンとしてプログラムを実行したい。rsh接続があり、切断後にプログラムを実行したい。
util.cppとforker.cppの2つのプログラムがあるとします。
util.cppはいくつかのユーティリティです。私たちの目的のために、それを単なる無限のルートにします。
util.cpp
int main() {
while (true) {};
return 0;
}
forker.cppはいくつかのプログラムを取り、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フォーカーがすぐに終了し、utilが実行されています)が、ローカルマシンでのbashは一時停止しています。utilが停止するのを待っています(チェックしました。util.cppが正常よりも戻ってきた場合)が、理由がわかりません。
2つの質問があります:
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!