2011-08-25 5 views
1

나는 busybox에서 실행되도록 bash 스크립트를 이식하고있다. 이들은 Ashd에서 지원되지 않는 disown을 사용하여 일부 프로세스를 종료 한 후에 해당 프로세스의 메시지가 stdout/stderr에 나타나지 않도록합니다. 이 기능을 유지하고 싶습니다. 그것이 stdout/sterr을 닫거나 실행 후 /dev/null으로 리디렉션되는지 여부를 나타냅니다.`disown` 또는 gdb없이 프로세스의 stdout과 stderr를 닫는 방법?

어떻게 끝나나요?

+0

'nohup cmd &'에 대해 알고 계십니까? 도움이 될까요? 행운을 빕니다. – shellter

+0

의견을 주셔서 감사합니다. 흠, 그건 도움이되지 못했습니다. – Derrick

+0

죄송합니다. 게시물을 다시 읽으면서, 아직 성취하려는 것을 분명히 알지 못합니다. psuedocode, 예상 입력 (해당되는 경우) 및 예상 출력을 순서대로 포함하도록 게시를 편집 할 수 있습니까? 이 스크립트 세트는 데몬이나 crontab에서 실행됩니까? 행운을 빕니다. – shellter

답변

0

프로세스가 프로세스 외부에서 실행되면 파일 설명자의 리디렉션을 수정할 수 없습니다. 즉, 쉘이 프로세스를 생성 할 때 리디렉션을 수행해야합니다. 그것이 Ignacio와 같은 파일로 리디렉션되거나 fds를 닫는 것이 당신에게 달려 있습니다.

그리고 왜 bash의 비 표시 내장 기능이 파일 설명자에 영향을 미치는지 생각하지 않습니다.

 
    disown [-ar] [-h] [jobspec ...] 
     Without options, each jobspec is removed from the table of 
     active jobs. If jobspec is not present, and neither -a nor -r 
     is supplied, the shell's notion of the current job is used. If 
     the -h option is given, each jobspec is not removed from the ta- 
     ble, but is marked so that SIGHUP is not sent to the job if the 
     shell receives a SIGHUP. If no jobspec is present, and neither 
     the -a nor the -r option is supplied, the current job is used. 
     If no jobspec is supplied, the -a option means to remove or mark 
     all jobs; the -r option without a jobspec argument restricts 
     operation to running jobs. The return value is 0 unless a job- 
     spec does not specify a valid job. 

하지만 어쩌면 당신이 달성하려고하는 것에 대한 이해가 불완전 다음은 bash는 설명서의 말씀입니다.

+0

이 오해는 내가 이식하는 스크립트에서 발생했습니다. http://devresources.linuxfoundation.org/dev/hotplug/ 그들은 pid를 죽이는 함수를 가지고 있지만 그렇게하기 전에 disown을 호출합니다. 터미널에 '프로세스 : 죽임'을 인쇄하지 않는 부작용이 있습니다. 비지 박스 애쉬 (butybox ash)는 disown하지 않았기 때문에 비슷한 것을 찾고있었습니다. kill의 출력을 리다이렉트시키는 것이 효과가있다. – Derrick

1

exec [n]>&-은 FD [n]을 종료합니다.