获取进程打开时的PID

时间:2013-08-07 20:15:39

标签: linux process pid

如何在流程打开时立即获取流程的pid。比如说我们运行./file.pl然后运行./file2.pl因为这两个文件都会在/ proc /文件夹中创建一个pid。如何在运行可执行文件时立即知道是否已创建进程。 我有一个文件,一旦获得绿色信号,/ proc /文件夹中有一个新进程,就可以运行所有命令。我怎么做? 编辑: 请不要使用shell命令回答。我不需要知道pid。我需要开发一个脚本,它可以立即知道我们在proc部门有一位客人

4 个答案:

答案 0 :(得分:1)

如果您通过shell启动该过程,则在后台启动进程:

./your_prog &

获取pid:

echo $!

答案 1 :(得分:0)

如果脚本返回shell提示符,则可以执行以下操作:

./your_prog
pidof -x your_prog

使用此perl脚本测试好了:

#!/usr/bin/perl

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

你需要

chmod +x your_prog

...前

答案 2 :(得分:0)

每个进程都可以通过getpid(2)系统调用获得自己的pid。在fork(2)创建进程时,父进程(例如某个shell)获取新子进程的pid。阅读例如Advanced Linux Programming了解更多信息。并且内核(而不是程序)创建了一些子目录/proc/1234/,只要它创建了pid 1234的过程,就会看到proc(5)

实际上,/proc/不是真正的文件系统。它只是一个伪文件系统,可以查看内核状态和整个Linux系统。

Perl为您提供了POSIX模块来连接系统调用。 getpid()系统调用使用$PID$$ Perl变量进行接口。

/proc/伪文件系统由内核填充。您也许可以使用inotify来跟踪/proc/中的更改,但这可能是一个坏主意。

你的问题不明确,我们无法理解你真正想做什么以及你尝试过什么。

答案 3 :(得分:0)

尝试下面的shell脚本。(您可能必须在下面的脚本中包含对预期输出的更改)

#!/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

任何可执行的内容都可以替换为您的内容,以便创建新进程。

注意:这不是监视新进程的脚本。这个脚本示例可以帮助您解决问题。 请回答这个答案,我可以重新定义我的答案。