두 개의 Linux 명령을 실행해야 각 출력이 종료되지 않고 계속 stdout으로 출력됩니다 (I Ctrl-C
까지).포 그라운드에서 두 개의 Linux 명령을 실행하고 표준 출력을 병합 할 수 있습니까?
2 개의 별도 터미널에서 2 개의 명령을 아무런 문제없이 실행할 수 있습니다.
그러나 한 터미널에서 하나의 명령을 실행하여 위의 두 명령을 모두 포 그라운드에서 실행하고 표준 출력을 공유하도록 할 수 있습니까?
두 개의 Linux 명령을 실행해야 각 출력이 종료되지 않고 계속 stdout으로 출력됩니다 (I Ctrl-C
까지).포 그라운드에서 두 개의 Linux 명령을 실행하고 표준 출력을 병합 할 수 있습니까?
2 개의 별도 터미널에서 2 개의 명령을 아무런 문제없이 실행할 수 있습니다.
그러나 한 터미널에서 하나의 명령을 실행하여 위의 두 명령을 모두 포 그라운드에서 실행하고 표준 출력을 공유하도록 할 수 있습니까?
GNU 병렬으로 표현하고 제어 할 수 있습니다. 반복적으로 출력되고 멈추지 않는 2 개의 더미 프로세스 인 f1
과 f2
을 생성한다고 가정 해 보겠습니다. 그들은 다음과 같습니다
F1
#!/bin/bash
while :; do
echo 1,$RANDOM
sleep 2
done
F2 이제
#!/bin/bash
while :; do
echo 2,$RANDOM
sleep 2
done
한 번에 모두를 시작할 수 있습니다 (분명히 - 그것은 GNU라는 이유없이 병렬 아니에요) 이렇게 :
parallel --line-buffer ::: ./f1 ./f2
1,17387
2,1457
2,32743
1,15684
...
...
,
또는, 당신은 프로세스 이름 태그 출력의 라인을 원한다면, 당신은이 작업을 수행 할 수 있습니다
parallel --line-buffer --tag ::: ./f[12]
./f1 1,11877
./f2 2,28716
./f2 2,7683
./f1 1,23392
...
...
당신은 제어-C 과정, 그들은 모두 정지됩니다 - 당신은 변경할 수 있지만 당신 경우 wish - --halt
을 맨페이지에서 검색하십시오.
사용 중괄호 :
{ command1; command2; } > output
당신은 표준 출력과 표준 에러 모두 재 지정하려면 :
{ command1; command2; } &> output
이렇게하면 command1이 완료 될 때까지 command2가 실행되지 않습니다. 그러나 OP는 명령이 모두 종료 될 때까지 종료되지 않으며 의도가 둘 다 병렬로 실행된다는 것을 분명히합니다. – rici
당신은 배경에 첫 번째 그들이를 공유 전경에서 두 번째 하나를 실행 할 수 있습니다 stdout. Ctrl-C
을 사용하면 2 번째 것을 멈출 수 있고 1 번째를 멈추고 싶다면 그 직업을 죽여야합니다. 보도 fg
는
cmd1 & cmd2
당신이 &
대신 ;
를 사용하는 경우 믹스 출력 파일 다음
cmd1>file & cmd2>file
을 원한다면 Ctrl-C
, 두 번째 명령은 시작은 1 차 마감 당신은 더 원할 것입니다 경우 때 읽을 수있는 출력.
동일한 터미널에서 실행하고 함께 중지 할 수 있는지 확실하지 않습니다. 아마도 스크립트 나 비슷한 것을 사용하고있을 것입니다.
'stdbuf'명령을 사용하여 출력 라인을 병합 할 수 있습니다. – hek2mgl
감사합니다, Nicolas. 이것은 실제로 사용자가 백그라운드 프로세스를 처리해야한다는 것을 제외하고는 나쁜 옵션이 아닙니다. –
이 사실을 알지 못했습니다. 그것을 사랑해! 나는 이것이 내장 된 것이 었으면 좋겠다. 감사! –
** GNU Parallel **은 안타깝게도 광고가 미흡하고 사용량이 적습니다. 해마다 CPU 주파수가 증가하고 멀티 코어 시대가 시작되면서 앞으로 나아갈 길은 IMHO입니다. 프로젝트에 행운을 빌어 요! –