로그인하거나 로그아웃할 때 Ctrl+C를 누를 때까지 특정 사용자의 쉘이 정지됩니다.

로그인하거나 로그아웃할 때 Ctrl+C를 누를 때까지 특정 사용자의 쉘이 정지됩니다.

우리는 CentOS 6.9를 사용하고 있는데 내 사용자 중 한 명이 로그인하면 Ctrl+C를 누를 때까지 화면이 정지되는 버그에 직면했습니다. 그들이 나갈 때도 똑같은 일이 일어납니다. 이는 내가 루트이고 su(성가신 사용자)일 때도 발생합니다. 이 사용자는 tcsh를 사용하지만 tcsh를 사용하는 다른 사용자 중 이 문제가 발생하는 것을 본 적이 없습니다.

[root@boop] # su - troublesome_user
(hangs until terminate)    
^C[troublesome_user@boop ~]$ exit
logout
(hangs until terminate)
^C [root@boop] #

나는 bash에 가장 익숙하므로 .bash_profile 및 .bash_rc를 확인했지만 이제 tcsh가 다른 .profile 파일 세트를 사용한다는 것을 알고 있습니다. .cshrc 파일을 살펴봤지만 이상한 점은 발견되지 않았습니다.

내용은 다음과 같습니다.

setenv LC_ALL C
set path = ($path /nfs/bin) 

tcsh의 어떤 기능이 이 문제를 일으킬 수 있는지 아는 사람이 있습니까?

감사해요!

답변1

먼저 tcsh가 시작될 때 명령이 실행되는 모든 위치를 확인합니다.

이것매뉴얼 페이지이런 말이 있습니다(파일 위치를 굵게 표시했습니다).

로그인 쉘은 먼저 시스템 파일에서 명령을 실행합니다./etc/csh.cshrc그리고/etc/csh.login. 그런 다음 사용자의 홈 디렉터리에 있는 파일에서 명령을 실행합니다.~/.tcshrc(+) 또는 ~/.tcshrc를 찾을 수 없는 경우,~/.cshrc, 그 다음에~/.역사(또는 값histfile 쉘 변수), 그 다음에~/.로그인,마침내~/.cshdirs(또는 값dirsfile 쉘 변수)(+). 쉘은 /etc/csh.cshrc 이후 대신에 /etc/csh.login을 읽을 수 있으며, 이후 대신 ~/.tcshrc 이전에 ~/.login 또는 ~/.cshrc 및 ~/.history를 읽을 수 있습니다(그렇게 컴파일된 경우). ; 버전 쉘 변수를 참조하세요. (+)

그래도 문제가 해결되지 않으면 다음 두 가지를 시도해 보겠습니다.

  • 문제의 사용자로 로그인하여 정지시킨 다음 다른 콘솔로 전환하여 확인하십시오. w그러면 해당 사용자가 실행 중인 것이 표시됩니다.
  • Ctrl+Z대신 Ctrl+C실행 중인 프로세스를 중단하기보다는 일시 중지해야 합니다. 그런 다음 jobs무엇이 일시 중지되었는지 확인하세요.

편집: JdeBP가 의견에서 지적했듯이 su에서 tcsh -x-Vtcsh 옵션을 설정할 수도 있습니다. 하지만 다음과 같은 것을 찾을 수 있을 것 같습니다 -X.

su - troublesome_user -- -X
  • -x 실행 전에 모든 명령을 에코합니다.
  • -v 명령 입력은 기록 교체 후 에코됩니다.
  • -X -x와 동일하지만 .tcshrc가 처리되기 전에도 적용됩니다.
  • -V -v와 동일하지만 .tcshrc가 처리되기 전에도 적용됩니다.

관련 정보