![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#26
|
|
Level 9 ![]() ![]() ![]() Класс: Клерик Характер: Chaotic Evil Раса: Человек ![]() |
Хмм... Что-то не верится. Почитаю еще мануалы чтобы самому удостовериться и скажу точно.
Как я и говорил. Используя killall -9, вы убиваете все процессы, связанные с ним. То есть это грубое убийство процесса. Используя killall -kill, вы убиваете процесс по PID вроде как. |
![]()
Сообщение
#27
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
втопку мануалы
бсд - опенсурс (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#28
|
|
Level 9 ![]() ![]() ![]() Класс: Клерик Характер: Chaotic Evil Раса: Человек ![]() |
Вопрос закрыли. Я был неправ. Это одна и та же команда.
|
![]()
Сообщение
#29
|
|
Level 9 ![]() ![]() ![]() Класс: Клерик Характер: Chaotic Evil Раса: Человек ![]() |
А вообще какие есть варианты написания (хотя бы в теории) скрипта авторестарта, но не бональным убийством процесса.
|
![]()
Сообщение
#30
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
CODE HWND hWnd = FindWindow("Exo - BioWare Corp., (c) 1999 - Generic Blank Application", NULL); (IMG:style_emoticons/kolobok_light/prankster2.gif)
if(hWnd) SendMessage(hWnd, WM_CLOSE, 0, 0); |
![]()
Сообщение
#31
|
|
Level 9 ![]() ![]() ![]() Класс: Клерик Характер: Chaotic Evil Раса: Человек ![]() |
Насколько я понимаю это для винды?!
|
![]()
Сообщение
#32
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
угу, это же winapi
|
![]()
Сообщение
#33
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
Да впринципе всё просто.
Запускаем процесс, форкаемся, в чилде перенаправляем стандартные I/O куда-нить и exec'аем nwserver. А в родительском процессе читаем и пишем серверу... Меня кто-нибудь понял? (IMG:style_emoticons/kolobok_light/crazy.gif) -- man fork man exec man dup2fd man pipe |
![]()
Сообщение
#34
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
мне больше нравятся красивенькие окошечки (IMG:style_emoticons/kolobok_light/crazy.gif)
как в линуксоидах создавать потоки и обрабатывать ошибки? (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) |
![]()
Сообщение
#35
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
В *nix есть различные схемы мультипоточной работы.
Наиболее простая это fork() (вилка, англ.) - создание полной копии процесса-родителя. CODE void main() { int pid = fork(); if(!pid) { // pid = 0 - означает, что мы даём команды потомку } else { // pid = PID потомка, != 0, это тело родителя } } В потомок форк возвращяет 0, в родитель - PID потомка, а т.к. новый процесс является ПОЛНОЙ копией родителя, то так и отслеживают, кому какие команды выполнять. Теперь о nwserver'е... Выглядит это примерно так CODE void main() { int fd[2]; int pid; pipe(fd); pid = fork(); if(!pid) { char *nwserver[] = {"nwserver", "-module", "modulename", "-pvp", "2", "-servervault", "1"}; close(0); // отключить стандартный ввод close(1); // отключить стандартный вывод dup2(fd[1], 0); // сделать fd[1] стандартным потоком ввода execvp("./nwserver", nwserver); perror("execvp()"); // если execvp не удался, то процесс идёт дальше exit(1); // и эта } else { while(1) { sleep(14400); write(fd[0], "module modulename", strlen("module modulename")); } } } Вот так примерно (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#36
|
|
Level 9 ![]() ![]() ![]() Класс: Клерик Характер: Chaotic Evil Раса: Человек ![]() |
Ну с fork() я немного имел дело, но суть так не понял.
|
![]()
Сообщение
#37
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
я про то, что вот есть у нас прокся (перенаправлялка пакетов или типа того)..
и хочется на каждого клиента отдельные потоки создать, а не бесконечным циклом последовательно обрабатывать каждого.. и прокся эта в адресном пространстве процесса сервера должна быть и делать с ним что хочет (обрабатывать клиентов, следить за ошибками и т.п.) в маздае все это делается с 2х апи, а в линуксоидах - х.з.. нужно код смореть самому (IMG:style_emoticons/kolobok_light/rtfm.gif) (IMG:style_emoticons/kolobok_light/sorry.gif) |
![]()
Сообщение
#38
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
2_advanced, именно форками обычно и делается...
CODE void main() { int socket; int newfd; struct sockaddr_in server, client; // то-же что и SOCKADDR в Win //... // тут создаём сокет и всё такое, прописываем структуры, биндим сокет // man socket // man bind // man listen while(1) { newfd = accept(socket, (struct sockaddr *)&client, sizeof(client)); if(!fork()) { // создаём потомка, код для потомка close(socket); // закрываем listen-сокет (внутри потомка, для родителя он открыт) // тут делаем перенаправление для конкретного клиента } else { // код для родителя close(newfd); // закрываем сокет на нового клиента, управление мы передали потомку } } } Вот примерно так. Это для сервера. Для клиента обычно используются не форки, а обычные треды, -lpthread опция для gcc... В принципе треды - те-же яйца только сбоку, там всё как в M$. А форк - родная никсовая фича. |
![]()
Сообщение
#39
|
|
Level 2 ![]() Класс: Клерик Характер: Lawful Evil Раса: Человек ![]() |
QUOTE Ну с fork() я немного имел дело, но суть так не понял. создает точную копию процесса. Разница между родительским и дочерним процессом в pid, т.е программа может отследить кто родитель а кто потомок по pid. Если pid = 0 то идет ветка потомка, иначе продолжается ветка родителя. На этом принципе построена вся многопоточность в NIX системах. CODE void main() { int pid = fork(); if(!pid) { // pid = 0 - означает, что мы даём команды потомку, т.е. тут исполняется ветка потомка. } else { // pid = PID потомка, != 0, это тело родителя, т.е. тут продолжается ветка родителя. } } если нужно запустить новую программу, то используется exec(...), который полностью затирает текущий процес загружаемой программой. Т.е. fork() в связке с exec() в дочерней ветви запустит новую программу. Сообщение отредактировал alMuk - Apr 2 2006, 16:16 |
![]()
Сообщение
#40
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
вернемся к старому корыту
вот ковырял маздай и наткнулся там на SwapContext - хрень, переключающую текущие потоки так вот в линуксоидах оно тоже есть: http://lib.training.ru/Lib/ArticleDetail.a...&mi=106&mic=363 об этом я и говорил a всякие форки это типа запустил копию процесса, получив его id или узнал, что ты клон (IMG:style_emoticons/kolobok_light/drag.gif) как это поможет сидя в одном адресном пространстве *параллельно* и многократно выполнять инструкции я х.з.. ушел учить матчасть (IMG:style_emoticons/kolobok_light/drag.gif) Сообщение отредактировал 2_advanced - Apr 13 2006, 03:22 |
![]()
Сообщение
#41
|
|
Level 12 ![]() ![]() ![]() ![]() Класс: Вор Характер: Chaotic Neutral Раса: Человек NWN: Маппинг ![]() |
Проблема следующая.. Т.к. из админа клещами слова не вытянешь, то придётся говорить максимально абстрактно.
Проблема с доступом. Есть несколько подсетей типа 192,168,х,х. При включеном впн соединении (инет у нас так раздаётся) доступ по адресам ххх.блабла.ру бесплатный. На практике доступ к серверу НВНа получался только либо по локальному ип (192,168,х.у), либо по 62,тык-тык-тык, то есть по платному инету.. А надо (в силу определённой специфики) по бесплатному (нвн.блабла.ру). Подробнее сказать не могу, см. выше про клещи. Подскажите, куда рыть, может кто сталкивался с подобным? Или что мне надо узнать и написать сюда, чтобы вы могли ответить на этот вопрос? |
![]()
Сообщение
#42
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
Выводы /sbin/ifconfig -a и /sbin/route -n в студию
|
![]()
Сообщение
#43
|
|
Mystery ![]() Класс: Маг Характер: Lawful Evil Раса: Тварь NWN: Контент Амен ![]() |
kreon, а вы уверены, что сервак линуксовый?
|
![]()
Сообщение
#44
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
если судить по первому посту, то линуксовый
Сообщение отредактировал [MoF]Darth_Nick - Apr 22 2006, 18:12 |
![]()
Сообщение
#45
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
Угу (IMG:style_emoticons/kolobok_light/wacko.gif) У нас тут *nix-обсуждение, и в первом посте автор это и указал.. Вряд-ли он так часто меняет сервера (IMG:style_emoticons/kolobok_light/biggrin.gif)
Кстати, route работает и в винде А вместо ifconfig можно использовать ipconfig (IMG:style_emoticons/kolobok_light/aggressive.gif) |
![]()
Сообщение
#46
|
|
Mystery ![]() Класс: Маг Характер: Lawful Evil Раса: Тварь NWN: Контент Амен ![]() |
Я балда!
|
![]()
Сообщение
#47
|
|
Level 9 ![]() ![]() ![]() Класс: Клерик Характер: Chaotic Evil Раса: Человек ![]() |
Опять насущен вопрос по поводу отучалки нвсервера проверять ключи на валидность.
Так вот если забивать в нвсервер всяким хламом строку ^F_RGASE@SY^ERFU|RWT и XEWTMGX..A.[[WVT.SY]E.SW^ то затем при запуске нвсервера вылетает ошибка Segmentation fault (core dumped). Подскажите, мож где ошибся... Просто другого выхода кроме как так гемороиться у меня нет. |
![]()
Сообщение
#48
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
Версия какая? Для 65 могу дать фикс, для 66 и 67 знаю только "фаервольный" метод... или хук connect(3) (IMG:style_emoticons/kolobok_light/wink3.gif)
Сообщение отредактировал kreon - May 12 2006, 23:33 |
![]()
Сообщение
#49
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Richard @ May 12 2006, 22:15) [snapback]81497[/snapback] Опять насущен вопрос по поводу отучалки нвсервера проверять ключи на валидность. Так вот если забивать в нвсервер всяким хламом строку ^F_RGASE@SY^ERFU|RWT и XEWTMGX..A.[[WVT.SY]E.SW^ то затем при запуске нвсервера вылетает ошибка Segmentation fault (core dumped). Подскажите, мож где ошибся... Просто другого выхода кроме как так гемороиться у меня нет. Значит, перестарался. Затирай лучше нулями циферки, которые за ними следуют. А вот айпишники ты оттуда фиг вытащишь.. Они там хитро спрятаны. (IMG:style_emoticons/kolobok_light/smile.gif) Сообщение отредактировал virusman - May 13 2006, 00:32 |
![]()
Сообщение
#50
|
|
Level 9 ![]() ![]() ![]() Класс: Клерик Характер: Chaotic Evil Раса: Человек ![]() |
kreon Версия 1.67. virusman Ок. Попробую. Затер нулями циферки. Сервант запустился, но проверка осталась. Видно еще где то запрятано. |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 03:30 |