--- ./src/libs/zbxsysinfo/linux/proc.c.orig	2014-10-24 13:54:43.000000000 +0200
+++ ./src/libs/zbxsysinfo/linux/proc.c	2014-12-26 22:26:16.173741019 +0100
@@ -200,6 +200,26 @@
 	return FAIL;
 }
 
+static int	cmp_pid(FILE *f_stat, const pid_t pid)
+{
+	char	tmp[MAX_STRING_LEN];
+
+	rewind(f_stat);
+
+	while (NULL != fgets(tmp, sizeof(tmp), f_stat))
+	{
+		if (0 != strncmp(tmp, "Pid:\t", 5))
+			continue;
+
+		zbx_rtrim(tmp + 5, "\n");
+		if (strtoul(tmp + 5, NULL, 0) == pid)
+			return SUCCEED;
+		break;
+	}
+
+	return FAIL;
+}
+
 int	PROC_MEM(AGENT_REQUEST *request, AGENT_RESULT *result)
 {
 	char		tmp[MAX_STRING_LEN], *p, *p1, *procname, *proccomm, *param;
@@ -329,15 +349,16 @@
 
 int	PROC_NUM(AGENT_REQUEST *request, AGENT_RESULT *result)
 {
-	char		tmp[MAX_STRING_LEN], *procname, *proccomm, *param;
+	char		tmp[MAX_STRING_LEN], *procname, *proccomm, *param, *pidfile;
+	pid_t		pid;
 	DIR		*dir;
 	struct dirent	*entries;
 	struct passwd	*usrinfo;
-	FILE		*f_cmd = NULL, *f_stat = NULL;
+	FILE		*f_cmd = NULL, *f_stat = NULL, *f_pid = NULL;
 	int		zbx_proc_stat;
 	zbx_uint64_t	proccount = 0;
 
-	if (4 < request->nparam)
+	if (5 < request->nparam)
 		return SYSINFO_RET_FAIL;
 
 	procname = get_rparam(request, 0);
@@ -365,6 +386,27 @@
 		return SYSINFO_RET_FAIL;
 
 	proccomm = get_rparam(request, 3);
+	pidfile = get_rparam(request, 4);
+
+	if (NULL != pidfile && '\0' != *pidfile)
+	{
+		if (NULL != (f_pid = fopen(pidfile, "r")))
+		{
+			if (1 != fscanf(f_pid, "%d", &pid))
+			{
+				zbx_fclose(f_pid);
+				return SYSINFO_RET_FAIL;
+			}
+			zbx_fclose(f_pid);
+		}
+		else if (ENOENT == errno)
+		{
+			SET_UI64_RESULT(result, 0);
+			return SYSINFO_RET_OK;
+		}
+		else
+			return SYSINFO_RET_FAIL;
+	}
 
 	if (NULL == (dir = opendir("/proc")))
 		return SYSINFO_RET_FAIL;
@@ -401,6 +443,17 @@
 		if (FAIL == check_procstate(f_stat, zbx_proc_stat))
 			continue;
 
+		if (0 != pid)
+		{
+			if (FAIL == cmp_pid(f_stat, pid))
+				continue;
+			else
+			{
+				SET_UI64_RESULT(result, 1);
+				return SYSINFO_RET_OK;
+			}
+		}
+
 		proccount++;
 	}
 	zbx_fclose(f_cmd);
