Kasper wrote:
>
> Hej gruppe.
>
> Hvis jeg starter et program via. SSH, så lukker det umiddelbart så snart jeg lukker forbindelsen?
Det kommer vel an på, hvordan du lukker forbindelsen.
>
> Hvordan får jeg programmet til at blive kørende - Også når jeg lukker SSH-forbindelsen.
Hvis du gerne vil kunne komme i kontakt med progammet igen, så
er screen nok det bedste valg. Hvis jeg vil starte et program i
baggrunden helt uden forbindelse til terminalen starter jeg det
gennem det her program:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
int main(int argc, char ** argv)
{
char eflag;
int pipefd[2];
if (argc<2) {
fprintf(stderr,"Usage: %s <cmd>\n",argv[0]);
return EXIT_FAILURE;
}
if (pipe(pipefd)) {
perror("pipe");
return EXIT_FAILURE;
}
switch(fork()) {
case -1:
perror("fork");
return EXIT_FAILURE;
case 0:
close(pipefd[0]);
if (daemon(1,0)) {
write(pipefd[1],"e",1);
write(pipefd[1],&errno,sizeof(errno));
return EXIT_FAILURE;
}
write(pipefd[1],"",1);
fcntl(pipefd[1],F_SETFD,FD_CLOEXEC);
execvp(argv[1],argv+1);
write(pipefd[1],&errno,sizeof(errno));
return EXIT_FAILURE;
}
close(pipefd[1]);
if(read(pipefd[0],&eflag,1)!=1) {
perror("read");
return EXIT_FAILURE;
}
switch(read(pipefd[0],&errno,sizeof(errno))) {
case 0:
if (!eflag) return EXIT_SUCCESS;
default:
fprintf(stderr,"%s: Internal error!\n",argv[0]);
return EXIT_FAILURE;
case sizeof(errno):
perror(eflag?"daemon":argv[1]);
return EXIT_FAILURE;
}
}
--
Kasper Dupont -- Rigtige mænd skriver deres egne backupprogrammer
#define _(_)"d.%.4s%."_"2s" /* This is my new email address */
char*_="@2kaspner"_()"%03"_("4s%.")"t\n";printf(_+11,_+6,_,6,_+2,_+7,_+6);
|