tags:

views:

178

answers:

1

I want to run program as daemon in remote machine in Unix. I have rsh connection and I want the program to be running after disconnection.

Suppose I have two programs: util.cpp and forker.cpp.

util.cpp is some utility, for our purpose let it be just infinite root.

util.cpp

int main() {
    while (true) {};
    return 0;
}

forker.cpp takes some program and run it in separe process through fork() and 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;
}

If I run:

./forker util

forker is finished very quickly, and bash 'is not paused', and util is running as daemon.

But if I run:

scp forker remote_server://some_path/
scp program remote_server://some_path/
rsh remote_server 'cd /some_path; ./forker program'

then it is all the same (i.e. at the remote_sever forker is finishing quickly, util is running) but my bash in local machine is paused. It is waiting for util stopping (I checked it. If util.cpp is returning than it is ok.), but I don't understand why?!

There are two questions:

1) Why is it paused when I run it through rsh?

I am sure that I chose some stupid way to run daemon. So

2) How to run some program as daemon in C/C++ in unix-like platforms.

Tnx!

+1  A: 
jschmier
Max
about the second question, I think you meant nohup ./program, not nohup ./forker program. Anyway, nohup doesn't return till program is running. That's why I needed forker. If you rsh to the server and there write 'nohup ./program' after that if you close your session, program is still running. But if you try to run 'rsh server "nohup ./program"' this again is paused. If you push ctrl-c, program is stopping. Anyway I was interested in the first question.
Max
jschmier
Max