Linux에서 프로세스를 서비스로 전환하는 명령 또는 방법은 무엇입니까? 서비스는 본질적으로 데몬 프로세스가 아닌가?
답변1
사용자 서비스 예제는 이를 수행하는 방법을 설명하는 가장 간단한 방법입니다.
mytask
서비스로 실행하려는 바이너리 또는 스크립트가 있고 /usr/local/bin/
.
다음 내용으로 홈 디렉터리에 systemd
이름이 지정된 유닛 파일을 만듭니다.my_example.service
~/.config/systemd/user/
[Unit]
Description=[My example task]
[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/local/bin/mytask
[Install]
WantedBy=default.target
이 줄은 ExecStart
실행하려는 바이너리 또는 스크립트의 경로를 지정하는 곳이므로 가장 관련성이 높습니다.
부팅 시 서비스가 자동으로 시작되게 하려면 다음을 실행하세요.
systemctl --user enable my_example.service
다시 시작하지 않고 즉시 서비스를 시작하려면 다음을 실행하십시오.
systemctl --user start my_example.service
서비스를 중지하려면 다음을 실행하십시오.
systemctl --user stop my_example.service
서비스 상태를 확인하려면 다음을 실행하세요.
systemctl --user status my_example.service
답변2
답변3
Linux에서는 프로세스를 서비스로 만드는 여러 가지 방법이 있습니다. 다른 사람들이 언급했듯이 를 사용하여 systemd
프로세스를 실행하고 그 출력을 볼 수 있지만 언어 능력에 따라 C의 'double'을 사용하는 구식 방식을 사용할 수 있습니다 fork()
(Python 및 일부 다른 언어에도 이 방법이 있습니다). ).
fork()
C 언어를 사용 하면 하위 프로세스가 생성됩니다. 상위 프로세스는 실제로 하위 프로세스에 대한 핸들을 유지하지만 완료될 때까지 기다리지 않을 수 있습니다. 상위 프로세스가 완료되면 하위 프로세스는 사실상 고아 프로세스가 됩니다. fork()
다시 ing은 init
(과정 1)을 의미합니다.사용새로운 프로세스.
fork()
어쨌든, 이 모든 것이 데몬을 생성하는 데 어떻게 작동하나요 ? 글쎄요, 상위 프로세스가 종료되더라도 하위 프로세스는 계속 실행됩니다. 즉, 하위 프로세스는 이를 실행한 셸에 제어권을 반환한다는 의미입니다. 다음은 기본적인 예입니다 fork()
.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
void forkexample()
{
int ret = fork();
if (ret == 0) {
fork();
/*
* zomg i could run in here forever
* as a daemon.
* listen for input, monitor logfiles, whatever.
*/
printf("I'm the child!\n");
int x = 0;
while (x < 10) {
printf("Still running...\n");
sleep(1);
x++;
}
}
else {
printf("Child process spawned; pid %i\n", ret);
printf("I'm a parent...\n");
}
}
int main()
{
forkexample();
printf(" and I'm exiting.\n");
return 0;
}
실행 결과는 다음과 같습니다.
어쨌든 계속 진행하십시오. 하위 프로세스는 프로그램처럼 영원히 계속 실행될 수 있습니다. 이것은 실제로 랩톱의 팬 속도를 제어하는 첫 번째 실제 프로그램을 작성한 방법입니다.