static int load(ErlNifEnv* env, void** priv, ERL_NIF_TERM load_info) { ErlNifResourceFlags flags = ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER; state_r = enif_open_resource_type(env, NULL, "state_r", destroy_state, flags, NULL); //rs_trace_set_level(RS_LOG_DEBUG); rs_trace_to((rs_trace_fn_t *) &trace_callback); return 0; }
int hechizar(void) { unsigned i; int pid; int sid; for (i=0; i<3; i++) { close(i); open("/dev/null", O_RDWR); } open_syslogd(); rs_trace_to(rs_trace_syslog); /* ignore sighup */ signal(SIGHUP, SIG_IGN); pid = fork(); if( pid == -1 ) { rs_log_error(_("forking: %s"), strerror(errno)); return -1; } else if( pid == 0 ) ; /* child */ else exit(0); /* new session */ if((sid = setsid()) <0 ) { rs_log_error("setsid: %s\n",strerror(errno)); return -1; } umask(0022); chdir("/"); return 0; }