다음 코드를 사용하여 데몬을 만들었습니다. 제 질문은이 데몬을 시작하고 데몬을 /var/run/mydaemon.pid
에 저장하는 스크립트를 만들고 싶습니다. 또한 저장된 mydaemon.pid
파일에 액세스하여 데몬을 중지하는 두 번째 스크립트.데몬의 저장소 PID를 시작하는 간단한 스크립트
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
static void daemonize(void)
{
pid_t pid, sid;
/* already a daemon */
if (getppid() == 1) return;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* At this point we are executing as the child process */
/* Change the file mode mask */
umask(0);
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
exit(EXIT_FAILURE);
}
/* Change the current working directory. This prevents the current
directory from being locked; hence not being able to remove it. */
if ((chdir("/")) < 0) {
exit(EXIT_FAILURE);
}
/* Redirect standard files to /dev/null */
freopen("/dev/null", "r", stdin);
freopen("/dev/null", "w", stdout);
freopen("/dev/null", "w", stderr);
}
int main(int argc, char *argv[]) {
daemonize();
/* Now we are a daemon -- do the work for which we were paid */
return 0;
}
주위를 둘러 보았고 나를 돕기 위해 예제 코드를 찾을 수없는 것처럼 보입니다. 내가 가지고있는 가장 가까운 것은 당신이 아래에서 보는 것입니다. 하지만 작동하지 않습니다.
#!/bin/sh
set -e
# Must be a valid filename
NAME=mydaemon
PIDFILE=/var/run/$NAME.pid
DAEMON=/home/me/mydaemon/mydaemon/a.out
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
case "$1" in
start)
echo -n "Starting daemon: "$NAME
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
echo "."
;;
*)
echo "Usage: "$1" {start}"
exit 1
esac
exit 0
"* 작동하지 않습니다. *"는 다소 문제가있는 보고서입니다. – alk
데몬이'getpid()'를 호출하고 그 결과를'/ var/run/mydeamon.pid'에 출력하게 하시겠습니까? – alk
관련 : http://stackoverflow.com/q/3957242/694576 http://stackoverflow.com/q/24662327/694576 – alk