명령줄에서 세미콜론으로 구분된 여러 명령을 실행하고 있습니다.
cmd1; cmd2; cmd3
+를 누르면 Ctrl현재 실행 중인 명령뿐만 아니라 모든 명령이 종료됩니다.C
kartik@kartikpc:~/junk/exp$ ls
test1 test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running
cat is running
^C
kartik@kartikpc:~/junk/exp
하지만 Ctrl+는 Z현재 프로세스만 일시 중지하고 다음 프로세스를 계속합니다.
kartik@kartikpc:~/junk/exp$ ls
test1 test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running
cat is running
^Z
[1]+ Stopped cat
test1 test2
kartik@kartikpc:~/junk/exp$
Ctrl동작이 분산되는 이유는 무엇이며 +가 + C처럼 동작 하도록 만드는 방법이 있나요 ?CtrlZ
저는 실제로 아래와 같이 tmux 세션을 통해 서버를 실행하고 있는데 +를 node app.js; $bash
실행하여 서버를 종료하면 bash도 종료됩니다. 쉘로 돌아가고 싶습니다. 내가 원하는 동작을 달성하기 위한 다른 옵션이 있습니까?CtrlC
[고쳐 쓰다]
tcsh
Ctrl+ C및 Ctrl+ 와 동일한 동작입니다 Z. bash가 Ctrlonlt+에 대해 하는 것처럼 항상 모든 명령에 대해 작동합니다 C. 그러나 일자리를 다시 가져오는 것은 fg
다시 가져오기만 할 뿐 cat
, 다시 가져오는 것은 아닙니다 ls
.
[kartika@vm-kartika-vnc ~/junk]$ ls
file1 file2
[kartika@vm-kartika-vnc ~/junk]$ echo $SHELL
/bin/tcsh
[kartika@vm-kartika-vnc ~/junk]$ cat; ls
cat is running
cat is running
^C
[kartika@vm-kartika-vnc ~/junk]$ cat ; ls
cat is running
cat is running
^Z
Suspended
[kartika@vm-kartika-vnc ~/junk]$ jobs
[1] + Suspended cat
[kartika@vm-kartika-vnc ~/junk]$ fg
cat // Pressing ctrl-d here to exit cat
[kartika@vm-kartika-vnc ~/junk]$
시스템 메시지:
kartik@kartikpc:~/junk/exp$ uname -a
Linux kartikpc 3.13.0-70-generic #113-Ubuntu SMP Mon Nov 16 18:34:13 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
kartik@kartikpc:~/junk/exp$ echo $SHELL
/bin/bash
답변1
bash 작업 제어를 찾아야 합니다. 다음은 좋은 설명입니다.http://web.mit.edu/gnu/doc/html/features_5.html
그러나 간단히 말해서 Ctrl+는 C명령(모든 행)을 종료하고 Ctrl+는 Z실행 중인 명령을 배경으로 실행합니다. 귀하의 경우에는 백그라운드에서 실행되고 (출력 억제 및 처리 중지) 명령을 cat
계속 실행합니다 .ls
cat
프로세스 목록을 확인하여 이를 확인할 수 있으며 프로세스가 여전히 목록에 있음 을 확인할 수 있습니다 .
작업을 포그라운드로 가져오려면 fg
명령을 참조하세요.
답변2
그게 node ...;$bash
그렇다면푸시pty 입력 버퍼에 넣은 경우 가능한 해결책 중 하나는 대화형 쉘에만 영향을 미치는 방식으로 인터럽트를 종료하도록 tmux
터미널을 적절하게 구성하고 대신 개행 문자를 사용하는 것입니다 .trap
;
stty noflsh; trap : INT
^처음 두 가지 요구 사항을 충족해야 합니다.
;
a와 a의 차이점은 \n
쉘이 입력을 읽는 방식 때문입니다. ;
세미콜론은 명령 목록을 구분한다는 점에서 개행 문자와 동일하지만 차이점은 읽기 입력을 구분하지 않는다는 것입니다. 예를 들어:
prompt$ cat; echo something
this the cat process
this the cat process
^C
prompt$
하지만 tty 드라이버를 구성했기 때문에아니요인터럽트가 수신되면 입력 버퍼를 플러시합니다 stty noflsh
.
prompt$ cat^Jecho something
this is the cat process
this is the cat process
^C
something
prompt$
bash
은 실제로 위에 표시된 이스케이프 문자 대신 + + + readline
키 조합 에 대해 리터럴 줄 바꿈을 표시하지만 효과는 동일합니다. 쉘 자체가 인터럽트를 효과적으로 무시하지만 그 자식은 그렇지 않은 경우 인터럽트를 수행할 수 있습니다.CtrlVCtrlJ철사터미널 자체가 중단된 입력을 완전히 폐기하지 않는 한 tty 입력은 직렬로 실행될 수 있습니다.