FTP 서버를 작성했습니다. 마녀는 ftpd.command를 통해 명령 행에서 시작됩니다. 이제 코코아 앱에서 해당 명령을 실행하고 싶습니다.Daemon with Cocoa
앱을 종료하고 명령을 계속 실행하고 싶습니다. 그리고 Cocoa 앱으로 돌아 왔을 때, FTP 서버가 아직 실행 중인지 알아야합니다.
나를 도와 줄 사람이 있습니까? 감사합니다. Julian
FTP 서버를 작성했습니다. 마녀는 ftpd.command를 통해 명령 행에서 시작됩니다. 이제 코코아 앱에서 해당 명령을 실행하고 싶습니다.Daemon with Cocoa
앱을 종료하고 명령을 계속 실행하고 싶습니다. 그리고 Cocoa 앱으로 돌아 왔을 때, FTP 서버가 아직 실행 중인지 알아야합니다.
나를 도와 줄 사람이 있습니까? 감사합니다. Julian
내가 끝날 때까지 명령 줄을 "차단"하지 않도록 FTP 서버를 조정해야한다고 생각합니다.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <unistd.h>
void start_daemon(void)
{
chdir("/");
setsid();
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
open("/dev/null", O_RDWR);
dup(STDIN_FILENO);
dup(STDIN_FILENO);
for(;;)
sleep(100);
}
int main(int argc, char *argv[])
{
pid_t pid;
if ((pid = fork()) < 0)
{
perror("fork() failed");
return 1;
}
if (pid == 0)
start_daemon();
printf("Child has PID %i.\n", pid);
return 0;
}
당신은 FTP 서버를 처리 할 수 launchd
를 사용한다 : 나는 여기에 몇 가지 예제 코드를 발견했다. 이는 구체적으로 사용자가 설명하는 상황, 즉 백그라운드 서비스 시작 및 관리를 위해 설계되었습니다.
~/Library/LaunchAgents
: 사용자가 제공 한 사용자 별 에이전트 는 이러한 위치 중 하나에 배치 할 수있는 launchd
구성 파일을 작성해야합니다.
/Library/LaunchAgents
: 관리자가 제공 한 사용자 별 에이전트./Library/LaunchDaemons
: 관리자가 제공하는 시스템 차원의 데몬.데몬 모든 클라이언트에 대해 하나 개의 인스턴스가있는 시스템 전반에 걸친 서비스입니다. 상담원은 사용자별로 실행되는 서비스입니다.
launchd
Configuration files 당신은 launchd
구성 PLIST를 만들고 위의 위치 중 하나에 배치 할 필요가 property list.
의 형태에 있습니다. launchd
이 실행될 때 또는 정기적으로 또는 다양한 작업 (예 : 폴더의 내용 변경)에 응답하여 plist를 구성 할 수 있습니다.
작업이 실행 중인지 확인하려면 Service Management framework을 사용해야합니다. 당신은 너무처럼 작업의 상태를 launchd
를 요청할 수 있습니다 : 작업을 찾을 수없는 경우
CFDictionaryRef jobDict = SMJobCopyDictionary(kSMDomainUserLaunchd, CFSTR("com.your.apps.bundle.id"));
다음 jobDict
는 NULL
될 것입니다.
(시스템 레벨 데몬을 사용하는 경우 kSMDomainUserLaunchd
을 kSMDomainSystemLaunchd
으로 바꿉니다.
GitHub의 내 프로젝트 TabletMagic에 대한 소스 코드를 살펴보십시오. 그것은 사용자 공간 데몬을 시작하고 launchd 항목을 관리하는 코코아 환경 설정 패널을 가지고 있습니다. Cocoa 부분은 관리자 권한을 요구하는 Cocoa 앱의 권한있는 컨텍스트에서 외부 헬퍼를 사용하여 권한이 부여 된 모든 작업을 수행합니다.이 작업은 처음 시작할 때 자체 설정됩니다. 이것은 순수한 코코아가 아니더라도 모든 표준 절차입니다.
이것은 확실히 비 코코아 해결책입니다. –