Sinceramente no sé si tu idea funcionará, pero contestando a la pregunta concreta, podés saber los PID rápidamente ejecutando:
ps -ef (para saber los procesos actuales)
grep apache (o httpd, para filtrar y obtener solamente los procesos de apache)
awk '{print $2}' (para obtener solamente la segunda columna de la salida, que es el PID)
Código:
ps -ef | grep httpd | awk '{print $2}'
Seguramente se pueda hacer más fácil (por ejemplo, usar la opción -u de ps que te permite indicar el usuario cuyos procesos querés ver) pero eso funciona para obtener los PID.
No hay ningún comando del sistema que te diga qué está haciendo ese PID, sin embargo.
Una forma de solucionar el problema sería registrar en la BBDD cada IP que inicie una descarga, luego usar netstat para ver si esa IP tiene una conexión al puerto 80 del servidor.
Mientras esa conexión exista, quizás puedas asumir que la descarga está activa (ejecutando el netstat cada x minutos o segundos). El "quizás" viene dado porque puede suceder que la descarga haya terminado pero el usuario siga cargando páginas del sitio, por lo que la conexión seguiría apareciendo.
Otra opción: lsof. Te puede decir qué procesos (en tu caso, cuántos
) tienen un cierto archivo abierto. Si encontrás 10 procesos de apache que tienen el archivo abierto, entonces hay 10 descargas. No sé qué tan cierto o seguro sea esto, pero es otra opción a investigar
Saludos.