The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как узнать в Linux у кого управление процессом ?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как узнать в Linux у кого управление процессом ?"  
Сообщение от L email(??) on 11-Окт-06, 23:19 
Исходные данные: Fedora Core 4, в С++ программе есть вложенные throw std::exception(), т.е. :
<function 1>
  ...
  throw <111>
<end of function 1>

<function 2>
  .....
  try {
     <function 1>
  }
  catch (<111>) {
     throw <222>
  }
<end of function 2>

И тут возникает странная проблема - если программа работает на Linux-драйве, то оба throw срабатывают как надо, а если на /mnt/..., где смонтирован диск Windows-сервера, через smb, то после отработки первого throw программа виснет. У меня единственная гипотеза - какой-то другой процесс перехватывает управление после обработки ошибки. Но непонятно как узнать, какой именно. Может кто-то знает средства, типа диспетчера какого-то, чтоб было видно что за программа срабатывает? Или может кто посоветует как обойти такую ситуацию? Спасибо заранее за любой совет.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Как узнать в Linux у кого управление процессом ?"  
Сообщение от masted (ok) on 12-Окт-06, 06:19 
>Может кто-то знает
>средства, типа диспетчера какого-то, чтоб было видно что за программа срабатывает?

strace


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как узнать в Linux у кого управление процессом ?"  
Сообщение от NuINu (??) on 12-Окт-06, 09:59 
ает странная проблема - если программа работает на Linux-драйве, то
>оба throw срабатывают как надо, а если на /mnt/..., где смонтирован
>диск Windows-сервера, через smb, то после отработки первого throw программа виснет.
>У меня единственная гипотеза - какой-то другой процесс перехватывает управление после
>обработки ошибки. Но непонятно как узнать, какой именно. Может кто-то знает
>средства, типа диспетчера какого-то, чтоб было видно что за программа срабатывает?

да ерунда, никакой ПРОЦЕСС перехватить управление не может!!! Думаю твоя прога висит в каких нибудь своих системных вызовах, например read или write.
Кстати strace как раз и покажет это.
А если это происходит(то фиг его знает что делать ;-)) )
Но можено поковыряться с флагами для open

Я вот не пойму, почему у тебя на нормальной ФС trow срабатывает???

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Как узнать в Linux у кого управление процессом ?"  
Сообщение от L email(??) on 12-Окт-06, 19:40 
>прога висит в каких нибудь своих системных вызовах, например read или write.
Реальная программа действительно использовала одну неродную библиотеку <boost> для чтения времени создания каталогов/файлов системный вызов одно, но когда обнаружилась эта ерунда с зависанием

>Я вот не пойму, почему у тебя на нормальной ФС trow срабатывает???
>


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Как узнать в Linux у кого управление процессом ?"  
Сообщение от L email(??) on 12-Окт-06, 19:44 
>>прога висит в каких нибудь своих системных вызовах, например read или write.
Реальная программа действительно использовала одну неродную библиотеку <boost> для чтения времени создания каталогов/файлов системный вызов утилиты, но когда стало зависать на исключениях, то в тестовой программе остались уже чисто throw вообще без ничего, искусственно вызываемые через throw std::exception(), и вот такая ерунда с smb обнаружилась.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как узнать в Linux у кого управление процессом ?"  
Сообщение от L email(??) on 12-Окт-06, 20:02 
Большое спасибо за strace!!!!! Класс!!!! strace показывает "futex(0x...,FUTEX_WAIT,2,NULL" Пока еще не знаю от чего это, но хотя бы видно!!!! :)))
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Как узнать в Linux у кого управление процессом ?"  
Сообщение от Асен Тотин email on 13-Окт-06, 01:18 
Привет,

man 2 futex
man 4 futex

Если концепция mutex вам понятна, разберетесь... а при чем тут Самба еще выяснять...

WWell,

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Как узнать в Linux у кого управление процессом ?"  
Сообщение от L email(??) on 13-Окт-06, 19:04 
Тайное всегда становится явным :)) Оказалось smb ни при чем, а глючит библиотека boost, конкретно итератор directory_iterator, он использовался в заголовке цикла как counter. В тестовой программе цикл был уже пустой, с одним только throw ..., и итератор не дает нормально работать throw, который за пределы этого цикла должен выбросить.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру