2013-08-07 5 views
0

Как получить pid процесса, как только он откроется. Например, скажем, мы запустим ./file.pl, а затем ./file2.pl Как оба эти файла создадут pid в/proc/folder. Как я могу сразу узнать, был ли процесс создан при запуске исполняемого файла. У меня есть файл со всеми командами, готовыми к запуску, как только он получает зеленый сигнал о том, что в папке/proc/есть новый процесс. Как мне это сделать? EDIT: Пожалуйста, не отвечайте командой оболочки. Мне не нужно знать пид. Мне нужно разработать скрипт, который может знать сразу же, что у нас гость в отделе ProcПолучить PID процесса при его открытии

+0

Каталог '/ proc /' (а не папка) заполняется * kernel *. В каждом запущенном процессе есть некоторый подкаталог (и программам не нужно ничего делать, чтобы создать это). Ваш вопрос непонятен. –

+0

Пожалуйста, отредактируйте свой вопрос, чтобы действительно объяснить, что вы хотите сделать, и покажите код, который вы пробовали. Ваш вопрос непонятен. –

+0

Пожалуйста, также объясните контекст и почему вы хотите сделать все это (и на каком языке вы кодируете, также покажите код, который вы пробовали). Возможно, будет более простой способ достижения вашей цели. –

ответ

1

Если запустить процесс с помощью оболочки, а затем начать процесс в фоновом режиме:

./your_prog & 

Получить идентификатор процесса:

echo $! 
0

Если сценарий даст вам приглашение оболочки обратно, вы можете сделать:

./your_prog 
pidof -x your_prog 

Испытано ОК с этим PERL скрипт:

#!/usr/bin/perl 

if (fork() == 0) { 
    sleep(600); 
} 

вам нужно

chmod +x your_prog 

раньше ...

+0

Hello @sputnick. Спасибо за ответ, но я ищу сценарий, который делает это. Я не хочу запускать файл. Я имею в виду, что в файле больше процессов. Я просто хочу получить pid asap – ban

+0

Если у вас нет приглашения сразу, вы можете запустить 'pidof -x your_prog' в другом псевдотерминале –

0

Каждый процесс может получить свой собственный PID с getpid(2) системного вызова. При создании процесса на fork(2) родительский процесс (например, некоторая оболочка) получает pid нового дочернего процесса. Чтение, например. Advanced Linux Programming для более. И ядро ​​(не программа) создает некоторый подкаталог /proc/1234/ см proc(5) как только он создает процесс Pid 1234.

На самом деле, /proc/ не является реальной файловой системы. Это всего лишь псевдо-файловая система, дающая представление о состоянии ядра и всей системы Linux.

Perl предоставляет вам модуль POSIX для взаимодействия системных вызовов. Сценарий getpid() сопряжен с использованием переменной Perl $PID или $$.

Файловая система /proc/ заполняется ядром. Вы могли бы использовать inotify, чтобы следить за изменением в /proc/, но это, вероятно, плохая идея.

Ваш вопрос непонятен, мы не можем понять, что вы действительно хотите сделать и что вы пробовали.

0

Попробуйте ниже сценарий оболочки. (Вы, возможно, придется внести изменения в поле ниже сценарий для вашего ожидаемого результата)

#!/bin/bash 
nr_proc_before=`ls -l /proc | wc -l` 
ls /proc > proc_list_before 

./any_executable & 

nr_proc_after=`ls -l /proc | wc -l` 
ls /proc > proc_list_after 
nr_new=`expr $nr_proc_after - $nr_proc_before` 

echo "$nr_new processes are created newly" 
echo "new processes pids are :" 
diff proc_list_after proc_list_before > new_pids 
sed "1d" new_pids 

if [ nr_new > 0 ] ; then 
    #trigger your file which has commands. 
fi 

Insted из any_execuatble вы можете заменить ваши вещи так, что будут созданы новые процессы.

Примечание: это не скрипт, который следит за новым процессом. Этот образец скрипта может дать вам идею решить вашу проблему. Пожалуйста, ответьте на этот ответ, я могу переопределить свой ответ.

Смежные вопросы