2013-07-07 9 views
0

"&"을 사용하여 백그라운드 프로세스를 만들지 않고 여러 가지 쉘 명령을 병렬 방식으로 실행하려고합니다. 또한, 나는 4 개 개의 코어가있는 경우, 나는 다음과 같이 CMD4 네 CMD1을 지정하려면, 예를 들어 (공정한 방법으로) 하나 개의 CPU에 하나의 작업을 할당 할 :백그라운드 프로세스없이 병렬로 셸 명령을 실행하는 방법은 무엇입니까?

CPU # 1 : CMD1

CPU # 2 : CMD2

CPU # 3 : CMD3

CPU # 4 :

는 당신이 날 그렇게 방법을 알려 주시기 바랍니다 수 CMD4?

"병렬"명령을 찾았지만 사용 방법을 알 수 없습니다. 또한 다음 명령을 시도했습니다. ./cmd1 | ./cmd2 | ./cmd3 | ./cmd4 4 개의 명령 (cmd1에서 cmd4까지)이 병렬로 실행되는 것 같지만 위에서 말한 것처럼 작업이 코어에 할당되어 있는지 확신 할 수 없습니다.

감사합니다.

죄송합니다. 나는 리눅스에서 명령을 실행하고있다.

+0

왜 명령에 어떤 코어가 할당되는지는 신경 써야합니까? – Johnsyweb

+0

혼란스럽게 생각합니다. 한 가지 작업을 하나의 코어에만 할당하려고합니다. (특정 코어에 작업을 할당 할 필요가 없음) – freddy

답변

3

먼저 프로세스를 병렬로 실행하려면 백그라운드 작업이어야합니다. &을 사용하면 어떤 점이 있습니까?

둘째, taskset을 사용하여 프로세스를 CPU 코어 또는 코어 집합에 바인딩 할 수 있습니다. 예 :

taskset -c 0 cmd1 & 
taskset -c 1 cmd2 & 
taskset -c 2 cmd3 & 
taskset -c 3 cmd4 & 

이것은 좋은 생각이 아닙니다. 한 프로세스가 오랜 시간 동안 유휴 상태이면 다른 프로세스는 할당 된 코어를 사용할 수 없습니다.

+0

"./cmd1 | ./cmd2 | ./cmd3 | ./cmd4"명령은 모든 명령 (cmd1에서 cmd4)을 백그라운드 프로세스로 만드나요? – freddy

+0

마지막을 제외한 모든 것. cmd4는 포 그라운드에 있으며 stdout은 터미널에 인쇄됩니다. – Joni

관련 문제