ivank
09-08-2003, 21:06
В общем я не нашёл способа заставаить bash запустить программу так, что бы она продолжила работать после того как непосредственно bash умрёт. Т.е. после запуска "xemacs some_file &" в xterm и закрытия этого самого xterm'а, окно xemacs'а умирало :( Короче, я написал программу spawn - после запуска "spawn xemacs some_file" в xterm'е и закрытия xterm'а xemacs продолжает прекрасно работать.
Вот код программы:/*
* Small "spawning" utility - processes run with spawn live after shell
* from wich spawn utility was run dies. Just enter "spawn xclock" in xterm
* and close xterm window - xclock will be still runing.
*
* (c)2003 Ivan 'ivank' Korostelev
* mailto: ivank@ivank.ru
*/
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char **argv)
{
if (argc < 2)
{
fprintf(stderr, "Usage: spawn <prog> <args>\n");
}
if (!fork())
{
execvp(argv[1], &argv[1]);
printf("spawn error: %s\n", strerror(errno));
}
return 0;
}
Записать это всё в spawn.c, откопилироватьgcc spawn.c -o spawn
strip spawn[/code]
Стать рутом и скопировать spawn в /usr/local/bin.
Затем, пользователи bash открывают ~/.bashrc и дописывают в него:[pre]alias xemacs="spawn xemacs"
# так же для остальных програм:
# alias <имя програмы> = "spawn <имя програмы>"
shopt -s expand_aliases
Пользователи других шеллов, должны знать как это сделать в их любимой оболочке - не за красвые же глазки они сменили (стандартный) баш, на нечто отнюдь не столь расппространённое.
Всё "xemacs smt" делает то что ожидалось - отткрывает окошко xemacs'а, котороее не зависит от попродившего его шелла (но только в иксах, в консоли работать не будет. Но для консоли есть vim :))
Может кому будет интересно. Кстати, если подобного эффекта можно добиться более простым способом - готов выслушать.
P.S. Для XEmacs более прямым способом открытия файла будет использование gnuclient, но это ртогонально предлагаемоому решению.
Вот код программы:/*
* Small "spawning" utility - processes run with spawn live after shell
* from wich spawn utility was run dies. Just enter "spawn xclock" in xterm
* and close xterm window - xclock will be still runing.
*
* (c)2003 Ivan 'ivank' Korostelev
* mailto: ivank@ivank.ru
*/
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char **argv)
{
if (argc < 2)
{
fprintf(stderr, "Usage: spawn <prog> <args>\n");
}
if (!fork())
{
execvp(argv[1], &argv[1]);
printf("spawn error: %s\n", strerror(errno));
}
return 0;
}
Записать это всё в spawn.c, откопилироватьgcc spawn.c -o spawn
strip spawn[/code]
Стать рутом и скопировать spawn в /usr/local/bin.
Затем, пользователи bash открывают ~/.bashrc и дописывают в него:[pre]alias xemacs="spawn xemacs"
# так же для остальных програм:
# alias <имя програмы> = "spawn <имя програмы>"
shopt -s expand_aliases
Пользователи других шеллов, должны знать как это сделать в их любимой оболочке - не за красвые же глазки они сменили (стандартный) баш, на нечто отнюдь не столь расппространённое.
Всё "xemacs smt" делает то что ожидалось - отткрывает окошко xemacs'а, котороее не зависит от попродившего его шелла (но только в иксах, в консоли работать не будет. Но для консоли есть vim :))
Может кому будет интересно. Кстати, если подобного эффекта можно добиться более простым способом - готов выслушать.
P.S. Для XEmacs более прямым способом открытия файла будет использование gnuclient, но это ртогонально предлагаемоому решению.