Process Management - Module 2
Process Controlling
fork()
#include<bits/stdc++.h>
using namespace std;
int main() {
int pid = fork();
if (pid == 0)
cout << "Child process -> " << pid << endl;
else
cout << "Parent process -> " << pid << endl;
}
exec()
#include <bits/stdc++.h>
int main() {
execlp("ls", "", "-la", NULL);
return 0;
}
wait()
#include<bits/stdc++.h>
#include<sys/wait.h>
using namespace std;
int main() {
int pid = fork();
if (pid == 0) {
sleep(5);
cout << "Child process -> " << pid << endl;
} else {
cout << "Parent process -> " << pid << endl;
wait(NULL);
}
}
Signal Controlling
Sigint
#include<bits/stdc++.h>
using namespace std;
void sig_int(int sig_num) {
cout << "Received signal, " << sig_num << endl;
exit(sig_num);
}
int main() {
signal(SIGINT, sig_int);
while (true);
}
Sigkill
#include<bits/stdc++.h>
using namespace std;
int main() {
int target_pid = 1234;
if (kill(target_pid, SIGKILL) == 0)
cout << "Killed " << target_pid << endl;
else
cout << "Not found!" << endl;
}
Mini Shell
#include<bits/stdc++.h>
#include<sys/wait.h>
using namespace std;
void sig_handle(int sig_num) {
cout << "\nCtrl + c pressed! Exiting..." << endl;
exit(sig_num);
}
int main() {
signal(SIGINT, sig_handle);
string s;
while (true) {
cout << "mini-shell:";
cin >> s;
if (s == "exit") break;
if (fork() == 0) {
execlp(s.c_str(), "", NULL);
exit(1);
} else {
wait(NULL);
}
}
}
Threading
C++
Manual Threads
#include<bits/stdc++.h>
using namespace std;
void func() {
cout << "hello from a thread..." << endl;
}
int main() {
thread t1(func);
t1.join();
cout << "Thread finished!" << endl;
}
Vectored Threads
#include<bits/stdc++.h>
using namespace std;
void func() {
cout << "hello from a thread..." << endl;
}
int main() {
vector<thread> threads(5);
for (int i=0; i<5; i++) {
threads.emplace_back(func);
}
for (auto& i: threads) {
if (i.joinable())
i.join();
}
thread t1(func);
t1.join();
cout << "Thread finished!" << endl;
}
Python
import threading
def func():
print("Hello from a thread!")
t1 = threading.Thread(target=func)
t1.start()
t1.join()
print("Thread finished!")