스크립트를 실행하는 호스트 이름과 CPU 수를 인쇄하는 간단한 데모 스크립트를 구현하고 싶습니다.
hostname -s
출력의 첫 번째 부분을 담당합니다. CPU 번호를 얻는 비슷한 편리한 방법이 있습니까?
(내가 아는 한, 일반적으로 프로세스에는 여러 CPU에서 실행될 수 있는 여러 스레드가 포함될 수 있습니다. 그러나 여기서는 스크립트가 단일 스레드에서 실행된다고 가정합니다.)
답변1
이는 위의 Jesse_b 솔루션과 유사하지만 pid를 사용하여 스크립트 정보를 요청합니다.
#!/bin/bash
host=$(hostname -s)
processor=$(ps -hp $$ -o psr)
echo "Script running on ${host} on processor ${processor}"
이 -h
옵션은 헤더를 억제하고, 이 -p $$
옵션은 주어진 pid를 가진 프로세스를 선택하고 $$
실행 중인 스크립트의 pid입니다. 이 -o psr
옵션은 프로세스가 현재 할당된 프로세서인 psr 필드만 선택합니다.
답변2
스크립트는 일반적으로 여러 스레드에서 실행되지만 이것이 당신이 찾고 있는 것이라고 생각합니다. 스크립트가 프로세스 그룹을 생성하기 때문에 이것이 정확하지 않을 것이라고 생각합니다. 이는 검색이며 ppid
스크립트의 많은 명령은 pid
해당 프로세스 그룹에서 자체 명령을 생성합니다. 따라서 완료되어 닫힌 명령이나 ps -aF
이 줄 이후에 시작된 프로세스는 포착되지 않습니다.
#!/bin/bash
hostname -s
echo -e "Proccess:\t$(pgrep "$(basename $0)")"
echo -e "$(ps -aF | grep "$(pgrep $(basename $0))" | awk '{print "CPU:\t\t"$7}')"