쉘 스크립트는 사용자의 프로세스 수를 제어합니다.

쉘 스크립트는 사용자의 프로세스 수를 제어합니다.

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

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

./run.sh -d directory num

여기서 run.sh는 수학 프로그램을 호출하는 스크립트이고, 디렉토리는 프로그램이 위치한 디렉토리이고 num은 새로운 실행 횟수를 나타냅니다(integer*num = NUM​​). "run.sh" 스크립트는 "디렉토리"(프로그램)의 복사본을 사용하여 "num"개의 디렉터리를 생성하고 프로그램의 "num" 인스턴스를 시작합니다. 제 경우에는 Matlab 인스턴스였습니다.

실행 중인 프로세스 수를 자동으로 추적하고 "num"이 완료되어 최대 수가 (MAX-num)로 줄어들면 총 수가 NUM이 될 때까지 Matlab의 다음 "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에는 시스템을 자주 사용하는 사람보다 최근에 많은 작업을 실행하지 않은 사람을 우선순위로 두는 데 사용할 수 있는 공정한 사용 가중치 옵션이 있습니다. 이는 총 CPU 시간의 고정된 하드 할당량보다 더 나은 경우가 많습니다.

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

답변4

하나Bash의 하위 프로세스 수 제한에 대한 다른 스레드의 질문에 대답다음 코드 조각은 4개 작업 중 하나가 완료될 때까지 기다리며 10초마다 확인합니다.

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

이러한 활동적인 수면 전략은 다소 비효율적이고 조잡하며 부정확하다는 점을 명심하세요.

관련 정보