У меня есть две проблемы: программа, которую я сделал, сжимаю и делаю почти неудобные процессы, если любая подзадача решена. Я считаю, что обе проблемы будут легко решены. Я запускаю Macbook в начале 2008 года на OSX 10.6.8.Как убить процессы зомби?
/Проблема № 1, кодирование:/
Я играл вокруг с IROBOT Создание с помощью termios.h ввода/вывода. Я компилирую без предупреждений или ошибок и могу запускать программу без сучка и задоринки. Я подключаюсь к роботу usb, который объясняет ввод «/dev/tty.usbserial».
gcc simple.c -o simple
./simple /dev/tty.usbserial
Программа начинается с проверки аргументы, переданные, а затем пытается соединиться с данным аргументом (символ * устройство /dev/tty.usbserial) с функцией biscConnect(). Это не удается на моем 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, но монитор активности, но Force Quit не может убить процесс, убить -9 [pid] не удается, killall [имя программы] не работает и т. Д., Несмотря на признание существования программы. Единственный способ принудительно прекратить процесс, похоже, заключается в физическом закрытии питания с компьютера и его перезагрузке (т. Е. Сбрасывание не работает, потому что оно пытается и не удается завершить процесс (ы)). Я трачу огромное количество времени, если отлаживать программу, которую мне нужно, чтобы каждый цикл запускать мой компьютер! Я могу постоянно создавать больше процессов, но не могу их удалить.
Я думаю, что если бы я знал родительский процесс, я мог бы убить эти «зомби», но я не знаю, что такое родитель.
Любые идеи о том, как избавиться от этих процессов без использования энергии, будут огромной помощью, спасибо!
Вы не можете убивать зомби; это неживые процессы. Вы можете убить родительский процесс зомби, и в этом случае зомби унаследованы процессом init, который быстро выводит их из их несчастья. –
@JonathanLeffler: Не зомби регулярно собираются? –
@JonathanLeffler: Я вижу, так можно было бы убить родителя, который, в свою очередь, убил бы ребенка? Проблема в том, что я не знаю, кто является родителем. – nico