如何在流程打开时立即获取流程的pid。比如说我们运行./file.pl然后运行./file2.pl因为这两个文件都会在/ proc /文件夹中创建一个pid。如何在运行可执行文件时立即知道是否已创建进程。 我有一个文件,一旦获得绿色信号,/ proc /文件夹中有一个新进程,就可以运行所有命令。我怎么做? 编辑: 请不要使用shell命令回答。我不需要知道pid。我需要开发一个脚本,它可以立即知道我们在proc部门有一位客人
答案 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
任何可执行的内容都可以替换为您的内容,以便创建新进程。
注意:这不是监视新进程的脚本。这个脚本示例可以帮助您解决问题。 请回答这个答案,我可以重新定义我的答案。