`./command.sh &`를 실행하면 백그라운드 작업이 일시 중지됩니다. 어떻게 계속 실행할 수 있나요?

`./command.sh &`를 실행하면 백그라운드 작업이 일시 중지됩니다. 어떻게 계속 실행할 수 있나요?

이것이 내가 실행 중인 것입니다:

alexandma@ALEXANDMA-1-MBP ./command.sh &
[2] 30374
alexandma@ALEXANDMA-1-MBP
[2]  + suspended (tty output)  ./command.sh

일시 중지를 시작하는 것이 아니라 백그라운드에서 계속 실행되기를 원합니다. 나는 이것을 루프로 실행할 것이기 때문에 그런 식으로 작동하는 것이 필요합니다.

어떻게 계속 실행할 수 있나요?

답변1

Anthon의 설명에 세부정보 추가:

쓰기 백그라운드 프로세스가 항상 중지되는 것은 아닙니다. 이는 터미널 설정에 따라 다릅니다 tostop.

stty tostop
stty -tostop

이 설정을 전환하는 데 사용할 수 있습니다. 따라서 백그라운드 프로세스가 "다른 프로세스의" 터미널에 쓰도록 하려면 계속 실행하면 되지만 필수는 tmux아닙니다 screen.

답변2

주어진 이유로 인해 중지됩니다. tty로 출력을 시도합니다. 출력을 리디렉션하거나(지원되는 경우 ) ./command.sh자체 창 tmux에서 명령을 실행할 수 있습니다. screen예를 들어

 tmux new-window -n "window name" ./command.sh

tmux list-windows그런 다음 를 사용하여 생성되고 에 연결된 tmux창 목록을 봅니다 tmux attach.

이런 방식으로 프로그램은 입력/출력이 발생할 때까지 기다리지만 일단 적절한 창에 들어가면 쉽게 입력을 제공할 수 있으며 출력은 아무런 활동 없이 캡처됩니다.

답변3

가장 쉬운 방법은 다음 명령을 실행하는 것입니다.

 nohup ./command.sh </dev/null &

SH 변형(CSH 변형 아님)을 사용하고 세션이 종료되는 경우 nohup을 추가하겠습니다.

답변4

쉘이 zsh이고 스크립트를 호출 중이며 sudo캐시된 유효한 자격 증명이 없는 경우(이전에 sudo를 실행한 적이 없거나 이전 자격 증명이 만료된 경우), 비밀번호를 입력해야 하는 경우 su이 오류가 발생할 수 있습니다 .

&언급된 다른 답변(예 : tmux 또는 화면 없이 스크립트 실행) 처럼 출력을 보존할 필요가 없는 경우 가능한 해결 방법은 다음과 같습니다.

  • sudoers 파일에서 비활성화 tty_tickets하거나 설정하여 timestamp_type( global모든 터미널에 비밀번호를 입력할 필요가 없도록) 및/또는 값을 늘립니다 timestamp_timeout(이로 인해 심각한 보안 문제가 발생함).
  • sudo스크립트에서 sudo가 발견될 때 자격 증명이 캐시되도록 스크립트를 실행하기 전에 간단한 명령을 실행합니다.
  • sudo 또는 su를 호출하지 않도록 스크립트를 변경하세요.

관련 정보