1

私には 2 つの問題があります。私が作成したプログラムはグリッチ アウトし、ほとんどキルできないプロセスを作成しています。OSX 10.6.8 で 2008 年初頭の Macbook を実行しています。

/問題 #1、コーディング: /

termios.h I/O を使用して iRobot Create をいじっています。警告やエラーなしでコンパイルし、問題なくプログラムを実行できます。入力「/dev/tty.usbserial」を説明するusbでロボットに接続しています。

 gcc simple.c -o simple
 ./simple /dev/tty.usbserial

プログラムは与えられた引数をチェックすることから始め、それから biscConnect() 関数で与えられた引数 (char * デバイスは /dev/tty.usbserial) に接続しようとします。私のMacでは失敗します。

//in file simple.c:
int main(int argc, char *argv[]){
if(argc!=2){
    printf("Put port... like /dev/tty.usbserial or something\n");
    exit(EXIT_FAILURE);
}
printf("Starting...\n");
biscConnect(argv[1]);
}
void biscConnect(char *device){
struct termios tty;

// Try to open the device from the input
    if((fd = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK))==-1){
        fprintf(stderr, "Serial port at %s could not be opened: %s\n", device, strerror(errno));
        exit(EXIT_FAILURE);
    }
     tcflush (fd, TCIOFLUSH);
     tcgetattr(fd, &tty);
     tty.c_iflag     = IGNBRK | IGNPAR;
     tty.c_lflag     = 0;
     tty.c_oflag     = 0;
     tty.c_cflag     = CREAD | CS8 | CLOCAL;
     cfsetispeed(&tty, B57600);
     cfsetospeed(&tty, B57600);
     tcsetattr(fd, TCSANOW, &tty);

     //The code fails prior to this point
}

それまでに動けなくなっていなければ、ロボットにバイトを送信してロボットを動かします。

/問題 #2、プロセスを強制終了できない: / ファイルを実行すると、ターミナルが奇妙なモードになり、プロンプトが表示されなくなり、何でも入力できるようになります (通常、プロセスが実行中であることを示します)。control-c を使用しても終了できません。私が終了できるように見える唯一の方法は、ターミナル ウィンドウを閉じることです。これは、実行中のプロセスを強制終了できません。

pid は簡単に調べることができますが、Activity Monitor では強制終了がプロセスの強制終了に失敗し、kill -9 [pid] が失敗し、killall [プログラム名] が失敗するなど、プログラムの存在を認識しています。プロセスを強制終了する唯一の方法は、コンピューターの電源を物理的に閉じて再起動することです (つまり、プロセスを終了しようとして失敗するため、シャットダウンは機能しません)。実行するたびにラップトップの電源を入れ直す必要があるプログラムをデバッグする場合、私は非常に多くの時間を無駄にしています! 継続的にプロセスを作成できますが、削除できません。

親プロセスを知っていれば、これらの「ゾンビ」プロセスを強制終了できると思いますが、親が何であるかはわかりません。

電源を入れ直さずにこれらのプロセスを取り除く方法についてのアイデアは、非常に役立ちます、ありがとう!

4

2 に答える 2