LINUX.ORG.RU

Что грузит процессор?

 


0

1

Написал bash-функцию, чтобы mplayer всегда запускался отдельным процессом, а консоль можно было закрыть:

mplayer() {
  mplayer "$@" < /dev/null &
}
данная команда прекрасно отработала сама по себе, но вот когда я запустил уже функцию, вместо желаемого получил 100% загрузку процессора ядром и я даже не знаю какой процесс убить, чтобы избавиться от этого. Картинка: http://ompldr.org/vaDJoOQ

★★★★★
Ответ на: комментарий от zolden

«mplayer file &» не запускается, в faq сказано, что нужно запускать «mplayer file < /dev/null &» и это работает.

Spoofing ★★★★★
() автор топика

Угадай, что теперь вызывается в функции mplayer по команде mplayer.

thriller ★★
()

mplayer ${@} >&/dev/null < /dev/null &

anonymous
()

У тебя функция mplayer вызывает функцию mplayer в фоне. В результате у тебя получилась бесконечная цепочка процессов bash с вызовом mplayer, в которой после запуска нового процесса предыдущий процесс завершается. Этакий огрызок от fork-бомбы 8). Утилиты типа top не видят эти процессы и не позволяют их убить, так как те возникают и завершаются слишком быстро.

Deleted
()
24 мая 2013 г.
mplayer() {
  /usr/bin/mplayer "$@" </dev/null >/dev/null &
}

Если вызвать mplayer по полному пути, запустится именно бинарник, а не bash-функция.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от teod0r

а для чего нужно </dev/null?

ЕМНИП плеер реагирует на команды из /dev/stdin. Вот, что-бы не реагировал.

PS: наверное у него там кнопки проверяются, дабы скрипт прервать. Или что-то такое.

drBatty ★★
()
Последнее исправление: drBatty (всего исправлений: 1)
Ответ на: комментарий от i_gnatenko_brain

я бы ещё 2>&1 дописал бы

Это по желанию. В идеале программа не должна писать в stderr, если всё хорошо. А если всё настолько плохо, что это надо написать в stderr, то пользователю определённо стоит на текст ошибки взглянуть. В реальности туда сыпется всякий хлам, так что да, дописать надо бы.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

запускался отдельным процессом, а консоль можно было закрыть

я не думаю, что тут нужен stderr

i_gnatenko_brain ★★★★
()
Ответ на: комментарий от i-rinat

В реальности туда сыпется всякий хлам, так что да, дописать надо бы.

ИМХО нет. Мусор-немусор должен пользователь решать, а не скрипт. Если пользователю не нужно, то пусть он и отправляет. Хотя это конечно вопрос идеологии.

drBatty ★★
()

ты познал рекурсию, поздравляю.

теперь познай alias

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.