2013-04-15 3 views
3

호스트에 텔넷 프로세스를 생성합니다. 내가 명령을 보내면, 무언가가 이 될 것으로 기대한다. 이것은 잠시 동안 계속됩니다. 그러나이 어딘가에있는 상호 작용 중에 호스트에 대한 연결이 신비하게 손실되고 내 스크립트가 생성되어 (현재 죽은) 텔넷 프로세스에 "보내려는"동안 스크립트가 죽습니다. 스폰 ID와 명령어 을 인수로 보내는 절차를 작성하고 싶습니다. 내가 명령을 "보내기"전에 스폰 시스템 ID가 존재하는지 확인하고 싶습니다. (프로그램과 호스트 사이의 연결이 존재합니다) . 그렇지 않으면 나가고 싶습니다. 이 같은 뭔가 :살아있는 spawn_id는 어떻게 확인합니까? (TCL)

proc Send {cmd sid} { 
if { $sid is not dead yet } { ;## don't know how to do this 
part 
send -i $sid "$cmd\r" 
} else { 
puts "channel id: $sid does not exist anymore. Exiting" 
exit 
} 
} 

답변

1

는 내가 전에이 문제에 달려 그렇게 맥/리눅스 ps 명령을 사용 :

if {[catch {exec ps $pid} std_out] == 0} { 
    puts "Alive" 
} else { 
    puts "It's dead, Jim" 
} 

Windows를 사용하는 경우, 나는 Tlist.exe를 들었 명령도 비슷한 기능을하지만 Windows 시스템을 테스트 해 볼 필요가 없습니다.

2

스폰 프로세스가 아직 살아 있다면 확인, 당신은 죽은 프로세스에 보낼 때 send이 제기 오류 catch 수보다는 :

proc Send {cmd sid} { 
    if {[catch {send -i $sid "$cmd\r"} err]} { 
     puts "error sending to $sid: $err" 
     exit 
    } 
} 
+0

그래,이 같은 캐치를 사용하고을 지금 현재의 방법을 잘못. 하지만 여기에 나와 싶지 않아 .. 만약 spawn_id가 살아 있지 않다면 같은 서버에 다른 텔넷 세션을 다시 열고 명령을 보내고 싶습니다. – Tanuj

+0

@ Tanuj 간단한 "불평 및 퇴장"대신에 다시 연결 하시겠습니까? 그래서 당신은 그 코드에서'puts'와'exit'를 재접속으로 대체 한 다음 명령을 다시'send'하려고 시도합니다. 당신은 이제'sid'에 대한 외부 세계의 지식도 바꿔야 만합니다 ... 아주 지저분 해지기 시작했습니다. 인터페이스의 불완전한 인수 분해가있는 것처럼 보입니다. –

+0

참고 : 위의 "if"문에 "args :가"proc name args body "오류가되어야하는 추가"} "가 있습니다. StackOverflow, 그것은 무한한 지혜로 인해 원판 답을 1 자로 편집 할 수 없습니다. –

관련 문제