Linux 시스템에서 실행 중인 프로세스를 일시 중지하고 나중에 다시 시작할 수 있는 방법이 있습니까?

Linux 시스템에서 실행 중인 프로세스를 일시 중지하고 나중에 다시 시작할 수 있는 방법이 있습니까?

파일을 컴퓨터에 복사해야 합니다. 그리고 그 데이터는 매우 방대합니다. 이제 서버에는 정상적인 서비스가 필요하며 특정한 바쁜 시간대가 있는 경우가 많습니다. 그렇다면 서버가 바쁜 시간에 도달하면 프로세스를 일시 중지하고 범위를 벗어나면 다시 시작하도록 이와 같은 명령을 실행하는 방법이 있습니까?

예상되는 결과

cp src dst

if time between 9:00-14:00 pause process
After 14:00 resume cp command.

답변1

SIGSTOP신호를 보낸 다음 신호를 보내 프로세스 실행을 일시 중지할 수 있습니다 SIGCONT.

워크로드가 단일 프로세스(백그라운드에서 실행되는 포크 도우미 없이)라고 가정하면 다음과 같이 사용할 수 있습니다.

# start copy in background, store pid
cp src dst &
echo "$!" >/var/run/bigcopy.pid

그런 다음 바쁜 시간이 시작되면 다음을 보내세요 SIGSTOP.

# pause execution of bigcopy
kill -STOP "$(cat /var/run/bigcopy.pid)"

나중에 서버가 다시 유휴 상태가 되면 다시 시작하세요.

# resume execution of bigcopy
kill -CONT "$(cat /var/run/bigcopy.pid)"

실행하려는 특정 시간에 대해 예약해야 하며 cron 또는 systemd 타이머(또는 기타 유사한 도구)와 같은 도구를 사용하여 이를 예약할 수 있습니다. 시간 간격을 기준으로 예약하는 대신 서버를 모니터링하여(예: 로드 평균, CPU 사용량 또는 서버 로그의 활동 확인) 복제 일시 중지/재개 시기를 결정할 수 있습니다.

또한 PID 파일을 관리해야 하며(사용하는 경우), 복제본이 일시 중지되기 전에 실제로 실행되고 있는지 확인하고, 복제본이 완료된 후 PID 파일을 삭제하여 정리해야 할 수도 있습니다.

즉, 신뢰할 수 있으려면 이를 중심으로 구축하는 데 더 많은 것이 필요하지만 프로세스 실행을 일시 중지/재개하기 위해 이러한 신호 SIGSTOPSIGCONT신호를 사용하는 기본 아이디어가 바로 여러분이 찾고 있는 것 같습니다.

답변2

프로세스를 일시 중지하는 대신 우선 순위를 낮출 수 있습니다.

renice 19 "$pid"

프로세스가 대부분의 시간 동안 CPU를 필요로 하는 다른 프로세스에 CPU를 양보하도록 가장 낮은 우선순위(가장 높은 우선순위)가 부여됩니다.

Linux에서는 I/O를 사용하여 동일한 작업을 수행할 수 있습니다 ionice.

ionice -c idle -p "$pid"

프로세스를 "유휴" 클래스에 넣어서정의된 유예 기간 내에 다른 프로그램에서 디스크 I/O를 요청하지 않는 경우에만 디스크 시간을 얻습니다..

답변3

예, 일시 중단하려는 프로세스의 프로세스 ID를 가져와야 합니다(command를 통해 ps). 그런 다음 다음을 수행하세요.

$> kill -SIGSTOP <pid>

그러면 프로세스는 상태 "T"(in ps)를 표시합니다.

계속하려면 다음을 수행하십시오.

$> kill -CONT <pid>

답변4

실행 중인 프로세스를 중단하여 이를 수행하려는 경우 Screen 프로그램을 사용하는 것이 좋습니다. 한동안 Linux를 사용하지 않았지만 IIRC가 단지 명령을 일시 중지했다가 나중에 다시 시작하면 취약해지고, 실수로 로그아웃하면 세션을 다시 시작할 수 없게 됩니다.

screen을 사용하면 세션을 중단한 다음 세션을 분리하고 로그아웃할 수 있다고 생각합니다. 나중에 세션으로 돌아가서 다시 연결할 수 있습니다. 시도해 보아야 하지만 세션이 훨씬 더 강력해집니다.

로그오프하고 집에 갔다가 원격으로 로그인하여 사무실에서 시작한 시스템에 다시 연결하고 저녁에 다시 시작한 다음 다음날 직장에서 다시 사용할 수도 있습니다.

관련 정보