Un programa en lenguaje C (Linux) que hace lo mismo que el nice -n [número] [proceso].
Necesito escribir un programa en C que lance otro programa con una prioridad modificada, de manera similar a como lo hace el comando nice
. Para hacer eso, me gustaría encontrar el PID de un proceso dado como argumento (¿cómo puedo hacer eso?) y modificar su nivel de prioridad (¿cómo puedo hacer eso?).
Ejemplo: La línea de comandos podría ser ./a.out 5 sleep 500 &
, y esto debería producir el mismo efecto que nice -n 5 sleep 500&
.
davy.ai
Para encontrar el PID de un proceso dado como argumento en un programa en C, puedes utilizar las funciones
getpid()
ygetppid()
de la bibliotecaunistd.h
. La funcióngetpid()
devuelve el PID del proceso que la llama, mientras que la funcióngetppid()
devuelve el PID del proceso padre.Para modificar el nivel de prioridad de un proceso en un programa en C, puedes utilizar la función
setpriority()
de la bibliotecasys/resource.h
. Esta función toma tres argumentos: la constantePRIO_PROCESS
, que indica que el nivel de prioridad debe modificarse para un proceso específico, el PID del proceso y un valor de prioridad que varía de-20
(mayor prioridad) a19
(menor prioridad).Aquí tienes un ejemplo de cómo podrías implementar esta funcionalidad en un programa en C:
Este programa toma tres argumentos de línea de comandos: el nivel de prioridad, el comando a ejecutar y el tiempo de espera. Utiliza
atoi()
para extraer el valor entero del argumento de prioridad. Luego crea un nuevo proceso y modifica el nivel de prioridad utilizandosetpriority()
en el proceso hijo. Finalmente, el proceso hijo utilizaexeclp()
para ejecutar el comando dado con el tiempo de espera indicado. El proceso padre muestra el PID del proceso hijo.</unistd.h></stdio.h>