import cinit from unix.schottelius.org
Signed-off-by: Nico Schottelius <nico@ikn.schottelius.org>
This commit is contained in:
parent
3729fc68eb
commit
423ba10303
13396 changed files with 269468 additions and 0 deletions
104
software/cinit/browse_source/cinit-0.0.4/client/kill_svc.c
Normal file
104
software/cinit/browse_source/cinit-0.0.4/client/kill_svc.c
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
KOPIE VON RUN_SVC
|
||||
|
||||
/*
|
||||
* (c) 2005 Nico Schottelius (nico-linux at schottelius.org)
|
||||
* run_svc
|
||||
* part of cinit
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "cinit.h"
|
||||
|
||||
/***********************************************************************
|
||||
* run_svc: run a service and beforeo all dependencies
|
||||
*/
|
||||
void kill_svc(char *rpath, pid_t pid)
|
||||
{
|
||||
int tmp;
|
||||
char svc[PATH_MAX], svcparams[PATH_MAX];
|
||||
struct stat buf;
|
||||
|
||||
D_PRINTF("starte kill_svc");
|
||||
D_PRINTF(rpath);
|
||||
|
||||
/******************* absolute PATH ***************/
|
||||
/* get current working dir */
|
||||
if(! (int) getcwd(pathtmp,PATH_MAX)) {
|
||||
perror("getcwd");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* change to rpath */
|
||||
if(chdir(rpath) == -1) {
|
||||
perror("chdir");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* get absolute name of rpath */
|
||||
if(! (int) getcwd(abspath,PATH_MAX)) {
|
||||
perror("getcwd2");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* change back */
|
||||
if(chdir(pathtmp) == -1) {
|
||||
perror("chdir2");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************* REGISTER SERVICE ***************/
|
||||
D_PRINTF(abspath);
|
||||
tmp = msg_start_svc(abspath); /* mark us as temporary */
|
||||
if(tmp == -1) return 1; /* already started */
|
||||
|
||||
/******************* BEGIN DEPENDENCIES ***************/
|
||||
D_PRINTF("Starte needs");
|
||||
strcpy(pathtmp,abspath);
|
||||
strcat(pathtmp,"/");
|
||||
strcat(pathtmp,C_NEEDS);
|
||||
if( ! run_run_svcs(pathtmp) ) {
|
||||
/* FIXME: add log + service name here */
|
||||
D_PRINTF("some NEEDED services failed)");
|
||||
msg_change_status(abspath, ST_FAIL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
D_PRINTF("Starte wants");
|
||||
strcpy(pathtmp,abspath);
|
||||
strcat(pathtmp,"/");
|
||||
strcat(pathtmp,C_WANTS);
|
||||
run_run_svcs(pathtmp); /* don't care about what happens with the want svc */
|
||||
|
||||
/******************* execute services ***************/
|
||||
strcpy(pathtmp,abspath);
|
||||
strcat(pathtmp,"/");
|
||||
strcat(pathtmp,C_RESPAWN);
|
||||
|
||||
if( stat(pathtmp,&buf) == 0) {
|
||||
D_PRINTF("Respawning");
|
||||
pid = respawn_svc(abspath);
|
||||
tmp = ST_RESPAWN;
|
||||
} else {
|
||||
D_PRINTF("exec_unce");
|
||||
pid = exec_svc(abspath);
|
||||
tmp = ST_ONCE;
|
||||
}
|
||||
|
||||
if(!pid) {
|
||||
msg_change_status(abspath, ST_FAIL, pid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
D_PRINTF("Melde status");
|
||||
if(!msg_change_status(abspath, tmp, pid) ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue