You are on page 1of 26

Chng 4

K thut lp trnh nng cao

Lp trnh nhng ARM-Linux

124

Mc tiu chng 4
Sau khi kt thc chng n{y, sinh vin c th
Nm c kh|i nim tin trnh (process), quan h
gia c|c tin trnh
Trnh b{y c c ch s dng signal giao tip
gia c|c tin trnh
Lp trnh s dng k thut a tin trnh
Trnh b{y kh|i nim lung
Lp trnh ng dng a lung

Lp trnh nhng ARM-Linux

125

Ni dung
4.1. Tin trnh (process)
4.2. C ch s dng signal
4.3. Lp trnh giao tip a tin trnh
4.4. Lung (thread)
4.5. Lp trnh ng dng a lung

Lp trnh nhng ARM-Linux

126

4.1. Tin trnh (Process)


Kh|i nim tin trnh
Lp trnh a tin trnh

Lp trnh nhng ARM-Linux

127

Khi nim tin trnh


Tin trnh c to ra khi ta thc thi mt chng
trnh
a tin trnh cho php nhiu chng trnh cng
thc thi v{ chia s d liu vi nhau
C|c tham s ca mt tin trnh
PID (Process ID): s hiu tin trnh
PPID (Parent Process ID): s hiu tin trnh cha
Command: c}u lnh c gi thc thi tin trnh

ls e o pid,ppid,command
Lp trnh nhng ARM-Linux

128

PID, PPID
Ly v PID: s dng hm getpid()
Ly v PPID: s dng hm getppid()
Hm getpid() v getppid() tr gi tr kiu pid_t (bn
cht l kiu int)

Lp trnh nhng ARM-Linux

129

Dng tin trnh


C|ch 1: S dng t hp phm Ctrl + C
C|ch 2: S dng shell command

kill PID

Lp trnh nhng ARM-Linux

130

To tin trnh mi
Cch 1: s dng h{m system

Lp trnh nhng ARM-Linux

131

To tin trnh mi
Cch 2: s dng h{m fork v{ exec

Lp trnh nhng ARM-Linux

132

4.2. C ch s dng signal


Signal l{ c ch cho php giao tip gia c|c tin
trnh
Signal l{ c ch khng ng b
Khi tin trnh nhn c signal, tin trnh phi x
l signal ngay lp tc
Linux h tr 32 SIGNAL

Lp trnh nhng ARM-Linux

133

Danh sch signal thng dng


Kiu SIGNAL

L do gi SIGNAL

SIGHUP

Bo cho chng trnh khi thot khi terminal

SIGINT

Khi ngi dng nhn Ctrl + C tt chng trnh

SIGILL

Khi chng trnh chy lnh khng hp l

SIGABRT

Khi chng trnh nhn c lnh abort

SIGKILL

Khi chng trnh nhn c lnh kill (ng chng


trnh)

SIGUSR1

Ty bin theo ng dng

SIGUSR2

Ty bin theo chng trnh

Lp trnh nhng ARM-Linux

134

Gi SIGNAL ti process
Cch 1: s dng shell command
kill [-SIGNAL_TYPE] PID
Cch 2: s dng h{m kill trong chng trnh, cho
php process n{y gi signal ti process kh|c
kill(PID, SIGNAL_TYPE)

Lp trnh nhng ARM-Linux

135

4.3. Lp trnh giao tip a tin trnh


C ch:
Tin trnh chnh to ra c|c tin trnh con s dng
lnh fork v{ exec
S dng c ch signal trao i tn hiu gia c|c
tin trnh

Lp trnh nhng ARM-Linux

136

V d
Bt v{ x l signal c gi ti mt tin trnh
(SIGTERM v SIGINT)

Lp trnh nhng ARM-Linux

137

killsignal.c

Lp trnh nhng ARM-Linux

138

V d: killsignal.c (tip)

Lp trnh nhng ARM-Linux

139

Demo
Lp trnh nhng ARM-Linux

140

4.4. Lung (thread)


Mt chng trnh mc nh chy mt lung ->
lung chnh
Lung chnh c th to ra c|c lung kh|c, c|c lung
s chy ng thi -> tng tc chng trnh
C|c lung chia s khng gian nh, truy xut file v{
cc ti nguyn khc
Tham s ca mt lung:
thread ID: s hiu lung (kiu d liu pthread_t)

Lp trnh nhng ARM-Linux

141

4.5. Lp trnh x l a lung

To lung
Truyn tham s cho lung
Nhn gi| tr tr v t lung
Tt lung

Lp trnh nhng ARM-Linux

142

To lung
Khai b|o th vin: pthread.h
H{m to lung: pthread_create

thread: thread id
attr: cc thuc tnh ca lung, mc nh NULL
start_routine: hm thc thi trong lung
arg: cc tham s truyn cho lung

Bin dch chng trnh:


gcc o multithread multithread.c -pthread
Lp trnh nhng ARM-Linux

143

M ngun to lung

Lp trnh nhng ARM-Linux

144

Truyn tham s cho lung


Khai bo cu trc d liu cha d liu cn truyn cho
lung. V d:
struct arg {
//Ky tu can in
char character;
//So lan can in
int count; };

Truyn d liu cho lung khi to lung qua tham s


arg
Chng trnh con thc thi lung nhn tham s v v
x l
Lp trnh nhng ARM-Linux

145

M ngun truyn tham s cho lung

Lp trnh nhng ARM-Linux

146

Tt lung
S dng h{m pthread_cancel:

thread: nhn tham s thread id ca lung


mun tt

Lp trnh nhng ARM-Linux

147

M ngun tt lung

Lp trnh nhng ARM-Linux

148

Tho lun

Lp trnh nhng ARM-Linux

149

You might also like