01시 39분에 셸 명령 하나가 실행되기도 전에 막혔다. 퇴사하고 AI로 회사를 만드는 중이라 글 쓰는 일도 기계에 넘기고 있었는데, 그날 밤에는 9월 5일자 블로그 원고를 만드는 작업을 백그라운드로 던져놓고 결과 파일이 생겼는지 확인하려고 240초를 재운 뒤 작업 폴더를 훑는 한 줄을 넣은 참이었다.

파일 목록이 올 자리에 차단 메시지가 왔다
돌아온 건 Blocked: sleep 240 followed by:로 시작하는 문단이었다. sleep 240 뒤에 붙여둔 ls와 tail을 통째로 막았다는 내용이었고, 그 밑에 한 줄이 더 있었다.
To wait for a condition, use Monitor with an until-loop
막았다는 말만 있었으면 나는 240초를 더 짧게 줄여서 다시 던졌을 것이다. 무엇으로 바꾸라는 말이 같이 왔기 때문에 다음 명령을 만드는 데 1분이 걸렸다.
대기를 조건으로 바꿨다
내가 원한 건 파일이 채워지면 바로 보는 것이었다. 손은 시간을 적고 있었다. 240초는 내가 어림잡은 숫자여서, 작업이 3분에 끝나면 1분을 버리고 5분이 걸리면 빈 폴더를 본다. 어느 쪽이든 한 번 더 돌려야 한다.
01시 40분에 이렇게 바꿨다.
until [ -s <출력파일> ]; do sleep 2; done파일에 내용이 생길 때까지 2초마다 확인하고, 생기면 그 즉시 빠져나온다. 성공 판정은 눈으로 했다. 루프가 빠져나온 자리에 9월 5일자 원고의 제목 줄이 찍혀 있었고, 그게 기다리던 출력이었다.
8시간 뒤, 옆 세션에서 같은 손버릇
여기서 끝난 줄 알았다. 09시 51분, 릴스 대본을 만들던 다른 세션에서 백그라운드 작업의 출력을 tail로 보려다 sleep 25가 또 차단당했다. 240이 25로 줄었을 뿐 형태는 똑같다.
두 번째 차단 자체는 놀랍지 않았다. 놀란 건 두 세션이 나란히 열려 있었다는 점이다. 01시 40분에 고친 세션도, 09시 51분에 막힌 세션도 00시 31분에 시작했고, 뒤엣것은 19시 50분까지 돌고 있었다. 한쪽에서 고친 형태가 옆 세션이 8시간을 더 도는 동안 한 번도 건너가지 않았다. 그 세션에서 고친 건 명령 한 줄이었고, 내 기본값은 그대로 남아 있었다.
같은 형태가 왜 다시 나왔는지는 원인 모름이고, 재현 조건은 세션 두 개를 나란히 띄워놓고 양쪽에서 백그라운드 작업의 출력 파일을 기다리는 상황이다.
조건, 증상, 회피법
조건은 포그라운드에서 sleep N; <명령> 형태로 백그라운드 작업의 결과를 기다릴 때다. 증상은 명령이 아예 실행되지 않고 Blocked: sleep N followed by:가 돌아오는 것이다. 회피법은 대기를 시간이 아니라 조건으로 적는 것 — 무엇이 채워지면 끝인지(-s <파일>)를 먼저 정하고, 그 조건이 참이 될 때까지 짧게 도는 루프를 쓴다.
긴 작업을 백그라운드로 던지고 결과 파일을 확인하는 흐름이라면, sleep에 넣을 초를 고민하기 전에 “무엇이 생기면 끝인가”를 한 줄로 적어보세요. 세션을 두 개 이상 띄워놓고 일한다면 한쪽에서 고친 형태를 파일에 적어두세요 — 옆 세션은 그 수정을 못 봅니다.
이날은 세션 9개, 도구 호출 255회, 실패 신호 53건이었다. 그중 두 번이 같은 sleep이다. 남은 실패 하나는 00시 20분에 한글 폴더로 cd 하다 경로가 바이트로 깨진 것인데, 11분 뒤인 00시 31분에 cd를 버리고 스크립트 안에서 절대경로를 열어 우회했다.