Creating Processes
- To create a new process, we often use the
fork()
system call in C or similar functions in other programming languages. This function creates a new child process that is an identical copy of the parent process.
Example in C:
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t child_pid; child_pid = fork();
// Create a new process
if (child_pid == 0)
{ // This code is executed by the child process
printf("Child process: PID=%d\n", getpid());
}
else if (child_pid > 0)
{ // This code is executed by the parent process
printf("Parent process: PID=%d, Child PID=%d\n", getpid(), child_pid);
}
else
{ // fork() failed
fprintf(stderr, "Fork failed.\n");
return 1;
}
return 0;
}
Terminating Processes
- Processes can terminate naturally when they reach the end of their code. However, they can also be terminated manually using the
kill
command or by sending a specific signal.
Example:
# Terminate a process by PID
kill <PID>
# Send SIGTERM (termination) signal to a process
kill -15 <PID>
# Send SIGKILL (forceful termination) signal to a process
kill -9 <PID>
Monitoring Processes
- Use the
top
command to monitor active processes and their resource usage.
top
Listing Processes (ps
command)
- The
ps
command provides information about running processes.
ps -ef
Process Priority and Scheduling
- You can use the
nice
andrenice
commands to adjust process priority.
# Launch a process with a specific priority (niceness)
nice -n <priority> <command>
# Change the priority of an existing process
renice <priority> -p <PID>
Process Resource Limits
- You can set resource limits for a process using the
ulimit
command.
ulimit -n 100 # Set the maximum number of open file descriptors to 100
Engaging Example:
Let’s create a practical scenario:
Suppose you’re running a server program that you want to execute at a higher priority. You’ll launch it with nice
and then monitor it using top
. If needed, you can adjust its priority using renice
.
Example:
# Launch a server with higher priority
nice -n -10 ./my_server
# Monitor processes including your server
top
# If needed, adjust the priority of your server
renice -n -5 -p <server_PID>
This example provides hands-on experience in creating, monitoring, and managing processes with priority adjustments. It helps learners understand how to control process behavior and resource allocation.