В общем я не нашёл способа заставаить bash запустить программу так, что бы она продолжила работать после того как непосредственно bash умрёт. Т.е. после запуска "xemacs some_file &" в xterm и закрытия этого самого xterm'а, окно xemacs'а умирало :( Короче, я написал программу spawn - после запуска "spawn xemacs some_file" в xterm'е и закрытия xterm'а xemacs продолжает прекрасно работать.
Вот код программы: Код:
/* strip spawn[/code] Стать рутом и скопировать spawn в /usr/local/bin. Затем, пользователи bash открывают ~/.bashrc и дописывают в него:[pre]alias xemacs="spawn xemacs" # так же для остальных програм: # alias <имя програмы> = "spawn <имя програмы>" shopt -s expand_aliases[/pre] Пользователи других шеллов, должны знать как это сделать в их любимой оболочке - не за красвые же глазки они сменили (стандартный) баш, на нечто отнюдь не столь расппространённое. Всё "xemacs smt" делает то что ожидалось - отткрывает окошко xemacs'а, котороее не зависит от попродившего его шелла (но только в иксах, в консоли работать не будет. Но для консоли есть vim :)) Может кому будет интересно. Кстати, если подобного эффекта можно добиться более простым способом - готов выслушать. P.S. Для XEmacs более прямым способом открытия файла будет использование gnuclient, но это ртогонально предлагаемоому решению. |
а не проще ли:
$nohup <progname> & ??? |
ivank
Хехе... наверное я не уловил какойто прикол твоей проги... Я согласин с Serpenter, какая разница между nohup blabla& и твоей прогой ??? [s]Исправлено: Nigon, 15:52 6-09-2003[/s] |
то Nigon
нет брат = ти ниправ nohup в иксах несрабатывает закрываешь х-терм = и все! пропало (по крайней мере в РХ9ю0) такшта парень прав) |
Вообще нахрена все это? nohup есть и его юзать надо. А так вы сейчас и cp,ls,rm.mv писать начнете??? Есть баш, настройте его и будет счастье. У меня slackware 9.0, про проблему в Х вообще не слышал. У меня даже когда в консоли процесс в bg отправляеш, можно выйти, а он себе крутится...
|
ivank
А если вместо execvp попробовать fork() ? |
^
|| Это был я |
Dimon
Цитата:
|
2makaveli
если xterm не крестиком закрывать, а exit (ctrl-d), то всё будет рулез. |
Guest 80 247 100
Цитата:
|
2Dimon:
дядя прав, форков и в натуре разведётся туева хуча (а их количество ограничено) - ведь автор предлагает юзать команду через alias. А вообще по правильному нужно делать так: $ exec | nohup <progname> & тогда происходит реальное открепление дочернего процесса, и xterm даже крестиком закрыть можно будет:) Правда, за pty процесс держится до последнего - это через ps можно увидеть. |
Serpenter
Цитата:
|
Странный ivank создал топ а сам в нем не участвует :(.
А может он просто для само утверждения написал это. |
Автор предлагает юзать через alias - что предусматривает многочисленные вызовы этой программы.
Разница между fork() и execvp() заключается в том, что fork() копирует страницы процесса, что есть нагрузка на проц/память и вообще не имеет смысла в случае, если родительский процесс сразу после форка вылетает - получается просто перегонка содержимого памяти с места на место. А execvp() _заменяет_ образ родительского процесса образом дочернего, что не несёт дополнительной нагрузки и в данном случае является оптимальным решением, имхо. Хотя я уже написал, как это делается не через одно место. |
Время: 06:30. |
Время: 06:30.
© OSzone.net 2001-