我目前正在編寫一個應用程序,允許用戶通過telnet訪問遠程計算機的bash shell。該應用程序是在遠程機器上運行的telnet服務器。我管道從Telnet流輸出到一個bash的過程,我產生了像這樣:通過標準輸入發送SIGINT
char *execArgs[] = {"/bin/bash", "-i", 0};
execv(execArgs[0], execArgs);
我可以做幾乎所有你能在一個正常的殼呢;鍵入命令,退格等。但是,我遇到問題使用CTRL + C來查殺任務。當我從telnet端收到一個CTRL + C序列時,它會以[0xFF] [0xF8]形式出現。該FF放遠程登錄到IAC模式(允許它解釋命令),以及F8告訴我的程序發送一個ETX(0×03):
char tmpchar = 3;
retval = write(outfd[1], &tmpchar, 1);
fflush(fstdin);
哪裏outfd是流進bash進程。但是,我不認爲0x03
被解釋爲一個SIGINT信號,或者至少它不會消除當前正在運行的任務。爲什麼會這樣?
你應該發送一個'SIGINT',而不是'^ C'!你使用pty與'bash'還是管道交談,或者是什麼? –
我正在使用管道 – crocboy