我有两个问题:我制作的程序出现故障并制作了几乎无法杀死的进程,如果任何一个子问题得到解决,我相信这两个问题都会很容易解决。我在 OSX 10.6.8 上运行 2008 年初的 Macbook。
/问题#1,编码: /
我一直在使用 termios.h I/O 使用 iRobot Create。我编译时没有警告或错误,并且可以顺利运行程序。我通过 USB 连接到机器人,它解释了输入“/dev/tty.usbserial”。
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 但 Force Quit 无法终止进程,kill -9 [pid] 失败,killall [program name] 失败等等,尽管承认程序的存在。强制终止进程的唯一方法似乎是物理关闭计算机的电源并重新启动它(即关闭不起作用,因为它尝试终止进程但失败了)。如果要调试每次运行我的笔记本电脑都需要重启的程序,我会浪费大量时间!我可以不断创建更多进程,但无法删除它们。
我想如果我知道父进程,我可能能够杀死这些“僵尸”进程,但我不知道父进程是什么。
任何关于如何在不重启电源的情况下摆脱这些过程的想法都会有很大的帮助,谢谢!