3개의 쉘을 자동으로 열고 3개의 명령을 실행하는 방법은 무엇입니까?

3개의 쉘을 자동으로 열고 3개의 명령을 실행하는 방법은 무엇입니까?

3개의 쉘을 열고 프로그램을 하나씩 실행하도록 설정했습니다.

cd foo/bar
./foo.sh
cd foo/bar
node bar.js
cd foo/bar
ruby foobar.rb

그러나 시간이 많이 걸리기 때문에 이를 수행하기 위한 쉘 스크립트를 작성했습니다.

cd foo/bar

./foo.sh &
node bar.js &

ruby foobar.rb

그러나 CTRL-C를 눌러 스크립트를 중지하면 다른 2개의 프로그램이 계속 실행 중입니다. 내가 들어가면

jobs

백그라운드 프로세스는 표시되지 않습니다(아마도 스크립트에 속함). 그렇다면 해당 fg프로세스를 전경으로 가져와서 하나씩 CTRL-C를 누를 수 있으므로 이렇게 해야 합니다.

ps ax | grep foo
ps ax | grep bar

프로세스 ID를 찾아 프로세스를 종료합니다.

자동으로 3개의 셸을 열고 3개의 프로그램을 실행하여 3개의 셸을 열고 실행하는 것처럼 동작하도록 하는 더 좋은 방법이 있습니까? 나는 STDOUT 출력에 관심이 없으므로 쉘 창이 세 부분으로 분할되어도 괜찮습니다.

tmux, emacs 또는 다른 도구가 이를 달성할 수 있습니까? (나는 이것이 가능한지 알기에는 tmux나 emacs에 너무 익숙하지 않습니다.)

답변1

귀하의 주요 질문에 대한 답변은 아니지만(저는 screen사용자이고 으로 이동할 필요성을 느낀 적이 없습니다 tmux) 다음 사항에 대한 의견입니다.

그러나 시간이 더 많이 걸리기 때문에 이를 수행하기 위한 쉘 스크립트를 작성했습니다.

cd foo/bar

./foo.sh &
node bar.js &

ruby foobar.rb

그러나 CTRL-C를 눌러 스크립트를 중지하면 다른 2개의 프로그램이 계속 실행 중입니다.

비대화형 셸에서 이 작업을 수행하면 셸은 cmd &실행 프로세스에 대한 POSIX 요구 사항을 따라 SIGINT 및 SIGQUIT 신호 처리를 "무시"로 설정합니다. 이는 +가 해당 신호를 종료하지 않는 이유를 설명합니다.cmdCtrlc

그러나 zsh, bash, mksh 및 yash(이 명령을 무시하는 dash, ksh93, bosh 제외 trap)를 포함한 여러 셸에서는 다음 명령을 사용하여 이러한 신호의 기본 구성을 복원할 수 있습니다.

#! /bin/zsh -
cd foo/bar || exit
(trap - INT QUIT; ./foo.sh) &
(trap - INT QUIT; node bar.js) &
ruby foobar.rb
wait

그러면 Ctrl+는 c비동기적으로 시작된 명령도 종료합니다.

관련 정보