Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> console vs process, запуск с терминала или из процесса? 
V
    Опции темы
BitCat
Дата 10.7.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Есть скрипт x.pl.
Нужно сделать такую вещь:
+)если этот x.pl запускался с консоли терминала (./x.pl), то выдать на экран 'TERMINAL'
+)если x.pl запускался из другого скрипта-процесса, то на консоль ничего выдавать не надо.

Вопрос: как узнать, откуда запущен скрипт - из консоли или из левого процесса через какой-нить exec/system/`` ? 
PM MAIL   Вверх
sharq
Дата 11.7.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



BitCat, скрипту все равно кто его запустил на выполнение.
Если тебе это так важно могу посоветовать, в каком-нить случае передавать через @ARGV откуда он был запущен и анализировать это.

Хотя если это дочерний процесс, то через вызов системной утилиты (ps) можно узнать кто его вызвал, но это сложно и не нужно  smile 

 smile  


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
BitCat
Дата 11.7.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



 smile 
Код

sub IsTerminalRun()
{
    # extracting script name
    my @path = split(/\//, $0);
    my $env0 = $path[@path-1];
    @path = split(/\//, $ENV{'_'});
    my $env_ = $path[@path-1];
    ($env0 eq $env_) ? return 1 : return 0;
}

на Solaris пашет.

под Redhat и FreeBSD - неа.. да и вообще ключ $ENV{'_'} какой-то очень специфический.
в общем жутко не переносимое решение.

до другого пока не додумался... млин.. 
PM MAIL   Вверх
DiverD
Дата 11.7.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



Цитата(sharq @ 11.7.2006,  11:38)
Хотя если это дочерний процесс, то через вызов системной утилиты (ps) можно узнать кто его вызвал, но это сложно и не нужно  smile 

А почему сложно? вот :
ps aux|grep name_script
 

Это сообщение отредактировал(а) diverd - 11.7.2006, 20:28
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
BitCat
Дата 12.7.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



> через вызов системной утилиты (ps) можно узнать кто его вызвал
Не сложно вызвать системную утилиту и распарсить её ответ, но всегда следует избегать вызова подобных вещей. Зачем вызывать внешнюю прогу, если можно написать это самому, без привязки к какой-либо утилите и ее ответу (мало ли что там дальше разработчики этой тулзы наворотят - может и ответ ее вообще не такой будет, а может из поставки ее исключат).

В общем, вот такая получилась функция:
Код

# returns true if script has been run from console otherwise returns false
# this function works correctly only if parent process started this process with backticks operator
sub IsTerminalRun()
{
    (-t STDOUT) ? return 1 : return 0;

 

Это сообщение отредактировал(а) BitCat - 12.7.2006, 09:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.