Matakuliah : H0483 / Network Programming
Tahun
: 2008
Versi
: 2.0
Pertemuan 5
Server dengan Multi Proses pada
Linux
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Mendemonstrasikan program server yang
bisa melayani banyak client dengan teknik
multi proses
2
Outline Materi
• Pengertian Proses
• Proses hirarki
• System call yang berhubungan dengan
proses
• Contoh program server dengan multi
proses
3
Pengertian Proses
• Proses
– Adalah program yang sedang
dieksekusi
– Setiap proses memilki:
• Executable program, data, stack
• Program counter, stack pointer, registers
• Address space (core image)
• Dll (lihat tabel dibawah)
4
Proses vs Thread
5
Pengertian Proses
• System Call : manajemen Proses
– fork(), waitpid(), execve(), exit(), getpid(),
getppid(), dll
• Hirarki proses
6
Pengertian Proses
• Process Identifier:
– Process ID (PID)
– Parent Process ID (PPID)
7
Contoh-1
int main(void)
{
pid_t child; int i;
if((child=fork())==-1){
perror("fork"); exit(EXIT_FAILURE);
}
else if(child==0){
for(i=0; i<10; i++){
printf("\tChild PID =%d\n",getpid());
printf("\tChild PPID=%d\n",getppid());
sleep(1);
}
exit(EXIT_SUCCESS);
}
else{
for(i=0; i<10; i++){
printf("\tParent PID=%d\n",getpid());
printf("\tParent PPID=%d\n",getppid());
sleep(1);
}
}
exit(EXIT_SUCCESS);
}
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
8
Contoh-2
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void childproses()
{
int i;
for(i=0; i<10; i++){
printf("\tChild PID =%d\n",getpid());
printf("\tChild PPID=%d\n",getppid());
sleep(1);
}
exit(EXIT_SUCCESS);
}
9
Contoh-2
void parentproses()
{
int i;
for(i=0; i<10; i++){
printf("\tParent PID=%d\n",getpid());
printf("\tParent PPID=%d\n",getppid());
sleep(1);
}
}
10
Contoh-2
int main(void)
{
pid_t child;
child=fork();
switch(child){
case -1: perror("fork");
exit(EXIT_FAILURE);
case 0: childproses();
default: parentproses();
}
exit(EXIT_SUCCESS);
}
11
Contoh-3
void childproses()
{
puts("Child process...");
printf("\tChild PID =%d\n",getpid());
printf("\tChild PPID=%d\n",getppid());
exit(EXIT_SUCCESS);
}
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
void parentproses(pid_t child, int status)
{
waitpid(child,&status,0);
puts("Parent Process...");
printf("\tParent PID=%d\n",getpid());
printf("\tParent PPID=%d\n",getppid());
printf("\tChild exited with
%d\n",status);
}
12
Contoh-3
int main(void)
{
pid_t child;
int status;
child=fork();
switch(child){
case -1: perror("fork");
exit(EXIT_FAILURE);
case 0: childproses();
default: parentproses(child, status);
}
exit(EXIT_SUCCESS);
}
13
Contoh-4
#include
#include
#include
#include
#include
<unistd.h>
<sys/types.h>
<sys/wait.h>
<stdio.h>
<stdlib.h>
void childproses();
void parentproses(pid_t child, int status);
int GlobalVar=10;
14
Contoh-4
int main(void)
{
pid_t child;
int status;
child=fork();
switch(child){
case -1: perror("fork");
exit(EXIT_FAILURE);
case 0: childproses();
default: parentproses(child, status);
}
exit(EXIT_SUCCESS);
}
15
Contoh-4
void childproses()
{
GlobalVar += 10;
printf("Child: Globalvar=%d\n",GlobalVar);
exit(EXIT_SUCCESS);
}
void parentproses(pid_t child, int status)
{
GlobalVar += 20;
printf("Parent: Globalvar=%d\n",GlobalVar);
waitpid(child,&status,0);
}
16
DayTimeServer tanpa Fork()
………… //lihat code sebelumnya
…………
for(;;){
sin_size = sizeof(struct sockaddr_in);
connsd = accept(listensd, (struct sockaddr
*) &cliaddr, &sin_size);
if(connsd == -1){
perror("error accept");
exit(1);
}
ticks = time(NULL);
snprintf(buff, sizeof(buff),"Date/Time:
%.24s\r\n", ctime(&ticks));
write(connsd, buff, strlen(buff));
close(connsd);
//sleep(10);
}
17
DayTimeServer dgn Fork()
for(;;){
sin_size = sizeof(struct sockaddr_in);
connsd = accept(listensd, (struct sockaddr *) &cliaddr,
&sin_size);
if(connsd == -1){
perror("error accept");
exit(1);
}
if(!fork()){
close(listensd);
ticks = time(NULL);
snprintf(buff, sizeof(buff), "Date/Time: %.24s\n",
ctime(&ticks));
write(connsd, buff, strlen(buff));
close(connsd);
//sleep(10);
exit(EXIT_SUCCESS);
}
close(connsd);
}
18
Latihan
• Buat program dengan menggunakan
system call fork(), agar terbentuk hirarki
proses sbb:
19
Latihan
Buat Program Client – Server
dengan Flow Control sbb:
20
Latihan
Buat Program Client – Server
dengan Flow Control sbb:
21
Latihan
Buat Program Client – Server
dengan Flow Control sbb:
22
© Copyright 2026 Paperzz