| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Процессы сами останавливаются |
| Автор: JekaZZ 23.12.2008, 16:17 | ||||||
Есть программа, которая запускает mplayer с помощью system(). Это делается в pthread потоке.
В routine вызывается system("mplayer -dumpstream -dumpfile some_file some_stream"); Так вот вчера все работало, а сегодня с утра на запуске system("mplayer...") останавливается mplayer и вся программа. Смотрю
в колонке STATE у mplayer-а стоит T, у пограммы - T1. Разбудить прграмму на несколько секунд удается:
После чего она снова переходит в T1. Если же за это время успеть дать команду на завершение потока плеера, плеер завершается и программа продолжает нормально работать. Сам mplayer kill-ом не будится. Вручную из командной строки mplayer запускается и работает. В чем дело? Я совсем не понимаю |
| Автор: JekaZZ 23.12.2008, 17:03 | ||
| Обнаружились новые ньюансы. Если программу разбудить
то она сама не останавливается, работает нормально, до тех пор пока не попытаешься разбудить mplayer таким же образом. Тогда и плеер не работает и программа снова останавливается - переходит в T1. |
| Автор: vinick 23.12.2008, 18:36 | ||
попробуй в вызове system перенаправить вывод mplayer'а в dev/null
|
| Автор: MAKCim 23.12.2008, 23:10 |
| JekaZZ, отладчиком/трассировщиком пройтись не судьба? |
| Автор: JekaZZ 24.12.2008, 11:40 |
| >/dev/null не помог. Да и, собтвенно говоря, как он должен был помочь? Ни отладчиком, ни трассировщиком не судьба: 1) Я в линуксе только начал программировать. 2) Проект не мой, я его доделываю и переделываю. 3) результате сборки проекта - 4 разделяемых библиотеки *.so и 6 выполняемых файлов. Все делается в консоли. В чем может быть проблема? Под виртуалкой на той же системе все работает. Те же скомпилиные, под виртуалкой рабочие, бинарники на реальном железе виснут. Может в системе что накрылось? Почему система усыпляет поток? |
| Автор: MAKCim 24.12.2008, 20:15 | ||
| JekaZZ, аргументы не принимаются смотри трассировщиком самое простое через strace
|
| Автор: JekaZZ 26.12.2008, 12:47 |
| strace останавливается на следующих строках: [pid 13546] stat64("/home/itvuser/.itvmedia/itv/data/channel_bestrussiantv.xml.enc/00000000.stream", <unfinished ...> [pid 13491] ioctl(29, FIONREAD <unfinished ...> [pid 13486] select(0, NULL, NULL, NULL, {0, 1000} <unfinished ...> [pid 13546] <... stat64 resumed> 0xb3c1930c) = -1 ENOENT (No such file or directory) [pid 13491] <... ioctl resumed> , [0]) = 0 [pid 13546] nanosleep({0, 10000000}, <unfinished ...> [pid 13491] nanosleep({0, 10000000}, <unfinished ...> [pid 13545] <... rt_sigaction resumed> {SIG_DFL}, 8) = 0 [pid 13545] stat64("/root/.mplayer/ch1?sid=28515CDA35B15108FA0AB26B49BA6273AE2794352BD7907FB226CED157E8688F.conf", 0xbfb7a320) = -1 ENOENT (No such file or directory) [pid 13545] ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 [pid 13545] ioctl(0, SNDCTL_TMR_START or TCSETS где home/itvuser/.itvmedia/itv/data/channel_bestrussiantv.xml.enc/00000000.stream - файл дампа, в который mplayer пишет поток. Вот то же самое место, но с запущенным вручную mplayer из командной строки: rt_sigaction(SIGCHLD, {0x8078d60, [CHLD], SA_RESTART}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGTERM, {0x8078d90, [TERM], SA_RESTART}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGHUP, {0x8078d90, [HUP], SA_RESTART}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGINT, {0x8078d90, [INT], SA_RESTART}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGQUIT, {0x8078d90, [QUIT], SA_RESTART}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGPIPE, {0x8078d90, [PIPE], SA_RESTART}, {SIG_DFL}, 8) = 0 stat64("/root/.mplayer/ch1?sid=C099C45A8D095910624A7A8371F2FA73760F0C9D537718E75A5E56611F305027.conf", 0xbfa5b7b0) = -1 ENOENT (No such file or directory) ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(0, SNDCTL_TMR_START or TCSETS, {B38400 opost isig -icanon -echo ...}) = 0 write(1, "\nPlaying mms://69.1.72.2/ch1?sid"..., 99 Playing mms://69.1.72.2/ch1?sid=C099C45A8D095910624A7A8371F2FA73760F0C9D537718E75A5E56611F305027. ) = 99 open("mms://69.1.72.2/ch1?sid=C099C45A8D095910624A7A8371F2FA73760F0C9D537718E75A5E56611F30.ifo", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory) В таком случае плеер работает. Помогите разобраться. |