사용자의 프로세스 수를 제어하는 ​​쉘 스크립트

사용자의 프로세스 수를 제어하는 ​​쉘 스크립트

총 NUMTOT개의 프로그램을 실행해야 합니다(C, Mathematica, ns-2... 수학적 환경 모두 가능). 문제는 이러한 프로세스가 실행되는 컴퓨터가 최대 실행 수(예: MAX(MAX < NUMTOT))만 허용한다는 것입니다.

터미널에서 다음 줄을 사용하여 이 프로그램을 실행합니다.

./run.sh -d directory num

여기서 run.sh는 수학 프로그램을 호출하는 스크립트입니다. 디렉토리는 내 프로그램이 있는 디렉토리이고 num은 새로운 실행 횟수를 나타냅니다(정수*num = NUM). 'run.sh' 스크립트는 '디렉토리'(프로그램)의 복사본으로 'num'개의 디렉토리를 만들고 'num'개의 프로그램 인스턴스를 시작합니다. 제 경우에는 Matlab 인스턴스가 있습니다.

실행 중인 프로세스 수를 자동으로 추적하고 'num'이 이미 완료되었기 때문에 최대 수가 (MAX-num)로 줄어들면 총계가 완료될 때까지 Matlab의 다음 'num' 시뮬레이션을 시작하는 스크립트를 원합니다. NUM개의 시뮬레이션이 완료되었습니다.

한 프로그램만 완료되었을 때 다음 프로그램을 호출하는 것만으로 스크립트가 MAX 가능한 프로세스를 유지할 수 있다면 훨씬 더 좋을 것입니다.

실제로 실행 중인 프로세스 수를 알기 위해 다음 스크립트를 실행합니다.

ps axu |grep plopez|grep simulacion|grep MATLAB|awk '{ $2} END{print NR}'

현재 실행 중인 전체 Matlab을 제공합니다.

단일 스크립트로 전체 시뮬레이션 세트를 어떻게 만들 수 있습니까?

답변1

사용자가 최대 프로세스 수를 적용하는 일반적인 방법은 pam_limits(8). 자세한 내용은 맨페이지를 확인 limits.conf(5)하고 /etc/security/limits.conf이에 따라 변경하는 예를 확인하세요.

특히 매개변수를 구성하려고 합니다 nproc.

 nproc
    maximum number of processes

이 매개변수가 사용된 맨페이지의 예:

       @faculty        soft    nproc           20
       @faculty        hard    nproc           50

답변2

NUM실행 중인 인스턴스 수를 주기적으로 확인하는 대신 에 도달할 때까지 프로그램을 계속해서 실행하고 이 스크립트 MAX시간을 병렬로 시작 하는 스크립트를 작성하는 것이 좋습니다 .

SIGCHLD하위 프로세스가 종료될 때 방출되는 신호를 트랩할 수도 있습니다 . 먼저 로 활성화해야 합니다 set -o monitor. 더 자세한 예와 대안은 다음에서 찾을 수 있습니다.Stackoverflow의 스레드.

답변3

MATLAB 작업이 비대화형(즉, 일괄 스크립트 실행)인 경우 다음과 같은 일괄 예약 소프트웨어를 살펴보는 것이 좋습니다.토크또는슬럼- 이러한 종류의 자원 관리는 정확히 그들이 수행하도록 설계된 것입니다.

이는 일반적으로 HPC 클러스터에서 사용되지만 귀하의 경우 컴퓨팅 노드가 하나만 있는 클러스터가 있습니다.

Slurm은 다른 스케줄러에 대한 수년간의 경험을 활용하여 현대적이고 잘 설계된 시스템이라는 장점이 있습니다. Torque/PBS는 친숙하다는 장점이 있습니다. 많은 사람들이 이미 다른 클러스터에서 사용해 본 적이 있습니다. Slurm에는 PBS 또는 Torque에 익숙한 사람들이 익숙한 명령을 사용하여 즉시 사용할 수 있도록 호환성 래퍼 세트가 있습니다.

어느 쪽이든 CPU 코어, 메모리, 사용 가능한 라이센스 등을 기준으로 작업 일정을 제어할 수 있는 다양한 옵션을 제공합니다. 또한 사용자당 누적 사용량을 추적하거나 제한해야 하는 경우 회계 기능도 제공합니다. 예를 들어, Slurm에는 시스템을 많이 사용한 사람들보다 최근 작업을 많이 하지 않은 사람들의 작업 우선 순위를 지정하는 데 사용할 수 있는 공정 사용 가중치 옵션이 있습니다. 이는 고정된 전체 할당량보다 더 나은 경우가 많습니다. CPUTime.

제한된 라이선스를 피하는 또 다른 옵션은 다음과 호환되도록 MATLAB 스크립트를 작성하는 것입니다.GNU 옥타브MATLAB도 그렇고. 그런 다음 필요한 만큼 테스트/개발 실행을 실행할 수 있으며, 결과를 게시하거나 다른 연구원과 협력하는 데 필요한 경우 MATLAB에서 최종 실행을 수행할 수 있습니다. Octave는 대부분 MATLAB과 호환되지만 몇 가지 차이점이 있습니다.요약.

답변4

bash의 하위 프로세스 수 제한을 다루는 다른 스레드에서 대답하십시오.4개의 작업 중 하나가 완료될 때까지 기다리며 10초마다 확인하는 다음 코드 조각을 보여줍니다.

while [ $(jobs | wc -l) -ge 4 ] ; do sleep 10 ; done

그러한 적극적인 수면 전략은 다소 비효율적이고 조잡하며 부정확하다는 점을 명심하십시오.

관련 정보