Я хочу запустить программу как демон на удаленной машине в Unix. У меня есть rsh-соединение, и я хочу, чтобы программа работала после отключения.
Предположим, у меня есть две программы: util.cpp и forker.cpp.
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'
тогда это все то же самое (т. Е. У forker remote_sever быстро заканчивается, util работает), но мой bash на локальной машине приостановлен.
Он ожидает остановки утилиты (я проверял это. Если 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!