Я понимаю это mkdir
является атомарным, так возможно:
lockdir=/var/tmp/myapp
if mkdir $lockdir; then
# this is a new instance, store the pid
echo $$ > $lockdir/PID
else
echo Job is already running, pid $(<$lockdir/PID) >&2
exit 6
fi
# then set traps to cleanup upon script termination
# ref http://www.shelldorado.com/goodcoding/tempfiles.html
trap 'rm -r "$lockdir" >/dev/null 2>&1' 0
trap "exit 2" 1 2 3 13 15
Я думаю традиционный пользователь Linux (гиковатый умелец, который на самом деле установил систему сам), действительно заботится о такой информации (какая технология находится позади этого инструмента?). Я - также один из тех гиковатых парней, которые, например, воздержались бы от установки и использования пакета просто, потому что это использует некоторую технологию, которую я не люблю. Некоторый вызов этот вид религии поведения, конечно. Глупый не так ли?
Так или иначе я могу думать о двух причинах:
Поставщики программного блока как гиковские (если не больше), чем те пользователи Linux также, таким образом, они нашли хорошей идеей добавить такую информацию.
Я думаю, когда эти поставщики программного блока помещают такую информацию о своих описаниях пакета, они, вероятно, делают ее как некоторую форму продвижения. Это время от времени работает (это работало надо мной довольно много раз).
Это - просто предположение, конечно.
Мой смысл - это, касается второй из четырех свобод программного обеспечения:
Свобода учиться, как программа работает и изменяет его, чтобы заставить его сделать то, чего Вы желаете (свобода 1). Доступ к исходному коду является предварительным условием для этого.
Разглашение языка (или другие технические характеристики) поддерживает способность людей выбрать и поощряет участие в проектах людей, которые являются опытными на тех языках.
Это может быть частично историческим. Даже в не таким образом удаленное прошлое для отдельных системных администраторов было обычно создать и установить все, что работало на их системе.
Примечания по тому, какой язык и библиотеки использовались для реализации инструмента, дают подсказку администратору о том, сколько работы, которой процесс будет для их системы.
В этом возрасте повсеместных и далеко идущих инструментов управления пакета это - что-то вроде анахронизма, но культура Unix консервативна в смысле не вывода вещей, которые, кажется, работают, таким образом, это будет некоторое время, прежде чем привычка умирает.
В расширении ответа jasonwryan:
При именовании языка, он был записан в, человек, который получает его, может оценить, как трудно он должен будет обеспечить патч, или получить некоторое понимание или расширить программу.
Конечно, это только имеет смысл, если Вы - программист.
Где Вы видели сводки? В репозитории или пакете как .deb или .rpm?
При создании его из источника информация могла бы быть полезна определить, необходимо ли установить другой материал (compliler, библиотеки, инструменты сборки).
Unix, и теперь Linux и BSDs, всегда имел действительно сломанную основу программного обеспечения, и намного более разнообразная аппаратная основа существовала в довольно недалеком прошлом. Было важно знать, что некоторое программное обеспечение работало в intepreters, который Вы имели в своей системе, или что Вы могли скомпилировать исходный код. Если у Вас нет интерпретатора языка Common LISP или интерпретатора Tcl или безотносительно интерпретатора, Вы не хотели потрудиться загружать источник, только узнавать, что Вы не могли выполнить его.
Наличие описания того, какой язык что-то было в предотвращенном много напрасно потраченного времени.
При запросе, “какова эта вещь?”, разработчик будет склонен описывать его характер, который для них связывается с исходным кодом, скорее что его функция. Кто-то, надо надеяться, перепишет описание, чтобы быть более ориентированным на пользователя, прежде чем оно закончится на пакете, но упоминание языка может все еще быть релевантно, например, к расширяемости и scriptability, или полезно для возможности притянуть участников.
С моей точки зрения такая информация является важной для привлечения новых участников, а также предоставления возможным пользователям непосредственной идеи того, сколько работы это могло бы повлечь за собой для интегрирования приложения в их систему.
Некоторые установки ограничиваются несколькими выбранными инструментариями, как GTK +, но не QT, или наоборот. Для администратора, который обслуживает систему и регулярно обновляет ее компоненты за длительный промежуток времени, это может только быть практическим и не религиозным вопросом.
Т.е. для пользователей основанного на источнике дистрибутива Linux это имеет большое значение, записано ли приложение в C, или в Objective C, потому что их компилятор должен поддерживать язык во-первых. Другие языки могут заставить устанавливать огромную стопку библиотек. Вопрос затем, снова, сколько работы Вы готовы принять для компиляции этого приложения.
Большинство разработчиков имеет предпочтение небольшого количества языков или может просто испытать недостаток в опыте в других. Чтобы позволить большему числу людей способствовать приложению, некоторые проекты даже разделяют свои источники на два различных языка (как Wesnoth, Забастовка Vega, Naev, только для именования некоторых). Один из них для базового приложения (как C или C++), другой для легкой модификации (как Python или Lua). Вот ссылка на главу "Архитектуры Приложений с открытым исходным кодом", которая описывает, как и почему это было сделано в Wesnoth.
Я просто скажу, что видел ужасно неэффективное программное обеспечение, записанное приблизительно на любом языке. Если Вы спрашиваете меня для эффективности, качество кода приложения намного более важно, чем язык, в котором это записано.
Я думаю, что многое из него имеет отношение к рекламе производительности. Приложение, записанное на скомпилированном языке (C, C++...), собирается работать чертовски много лучше, чем один записанный на языке сценария (жемчуг, Python...).
Но это также набрасывается на совместимость. Приложение, записанное в языке сценариев, также, вероятно, будет более портативным через архитектуру и OSs с мало ни к какой модификации.
В сегодняшних системах рабочего стола/сервера это не может быть настолько важно, но для меньших систем в пределах от встроенных систем к нетбукам SSD и планшетам, языки или библиотеки, пользовавшиеся программой, могут быть судьбоносной проблемой, и из-за размера и соображений мобильности.
Относительно размера: Добавление интерпретатора для дополнительного языка, наряду со всеми стандартными модулями и обычно используемыми дополнительными модулями, может легко добавить сотни мегабайтов к требованиям устройства хранения данных. То же идет для семейств библиотек, особенно те связанные с главными настольными средами как Gnome и KDE. Что хуже, идя от выполнения n
кому: n+1
Программы Perl не могли бы добавить так много к требованиям использования памяти, так как большая память может быть совместно использована, но идущий от n
Программы Perl и 0 программ Python к n
Программы Perl и 1 программа Python приводят к значительному скачку в использовании памяти. Это становится еще большим количеством проблемы, когда у каждого дурака, пишущего бесплатное программное обеспечение, есть их собственный любимый script/radtool язык, они хотят программировать в... Perl, Python, PHP, Ruby, JavaScript, Оболочка Bourne, Bash, Csh....
Относительно мобильности: Много интерпретируемых языков (а также платформы библиотеки) делает интенсивное использование функций, которые могут быть доступными в больших системах рабочего стола/сервера Linux, но не обязательно доступными в smaller/embedded/MMU-less системах. Зависимость от динамического .so
модуль, загружающийся во времени выполнения, приходит на ум...