【求助】如何让自己的进程成为守护进程
#include <stdio.h>: b% T; q% ?9 g* g. B
#include <sys/ipc.h>
7 a8 v1 w% v0 G" K #include <sys/sem.h>
5 P* S8 ?' l1 i" R) b" ] #include <sys/shm.h>
7 t9 \3 x1 q0 v5 N# i( j #include <sys/types.h>
; @3 k3 \" N8 i8 s6 |6 Y #include <sys/stat.h>
& h o/ p9 ^, U7 E. l
4 v+ A9 M4 w$ K" ^ union semun ) t- D6 r+ y8 t2 q1 c& U
{ / D* {) R7 S; @$ J, _
int val;' i& H9 \+ ~7 L0 t/ p0 V
struct semid_ds *buf; h1 W: I/ q" a9 D$ m, Z
unsigned short *array;% b u" _6 Q% t+ T( M$ e- A8 z
}arg;* C/ Z2 ~, g+ h8 }' ]
0 L" n1 V& \- z! O f, Y3 H4 S. j //生成信号量' n g" q: Q4 X5 r
int sem_creat(key_t key)# N* A; I6 ]9 t
{
s3 s0 M; p6 {9 O v union semun semopts;
+ L$ k( O' R+ |) b" L5 S4 g int semid;
/ y" \6 ]$ U4 y8 t
8 `" d2 |$ [% q* o; x semopts.val = 0;8 c9 B; w+ p0 U0 L5 T4 t
semid = semget(key, 1, IPC_CREAT|0666);
- R4 `7 ^0 e Z
& h# Q- B0 h" a, p+ a3 j if (semid == -1)
# f; W( r7 K7 Z {
) B/ K. x5 T9 q7 k9 \* z. x+ Z3 Z# f printf("creat semaphore error\n");' r3 Y O2 q9 ?* [8 T
exit(-1);
@) Z* j# U1 F6 J0 x- C- {3 {/ x% t }& H" I$ c/ |8 u
semctl(semid, 0, SETVAL, semopts); //信号量初始化2 ]$ M/ b g$ g& [3 `& C& G9 B' c% `
return semid;
2 z# o2 r' \% N5 ^+ g# j" I }0 l, F2 V/ N6 T9 k/ K- T/ _
$ n# r" L2 k2 A- M6 Z! N6 y
main()/ ]+ P7 l7 l) e
{
, Z" A' ~) V3 j$ ` key_t key;5 U( J3 y# S5 ]/ H0 M/ ^
union semun sem;/ H" ^6 ~! O( t
int semid, shmid;
6 g2 T) m4 e" F; {! ^6 P int *shm;" n1 N* q( s. Q( p& ~. U
long int i;
1 y$ w% n L+ N! k int size;
k% N3 ]4 q! C# l1 w9 _
+ C0 O9 U( F1 z9 g- S size = sizeof(long int);
% D" X" t, r5 D7 {# G0 J/ m key = ftok("./3",0);4 q5 p* i! [/ w9 J" L8 Y
shmid = shmget(key, size, IPC_CREAT|S_IRUSR|S_IWUSR);" W" J/ R3 |6 [# N6 k$ D5 B
& a6 ]7 p. e+ y/ O2 g. @ if (shmid == -1)
$ x8 u1 n$ z& t; T1 q# U5 b T1 X {
9 l/ p4 t# G6 o: K6 E- @0 V perror("failed to create/get shm");; C1 Z% F# S# g. N* H* {: o2 p
return -1;
1 ~! v. \7 q5 m4 E }7 `, X% a: @( Z3 y
% Q( q1 B+ d+ t% m* H( i
shm = shmat(shmid, 0, 0);( J! z. C& Y5 G2 {$ @
semid = sem_creat(key);
5 S1 R9 X" n B! f/ K: c! g+ q: c0 v
1 l7 k. Q, l \) J! s# X struct sembuf sem_get = {0,+1,IPC_NOWAIT};
. B( m. p: l! Z5 Q' n semop(semid,&sem_get,1);6 M7 `) l# Z' y) ^3 [
8 Z/ q' z0 ?$ F) l' S: Q1 w5 s for(i = 0;i<5000000;i++)( q, {# H; ^4 x n* I- t
{- {: `8 ^4 ^7 Z+ P: F4 a
*shm += 1;) q: q4 u) W4 O5 W
}) p3 U" k% [# M+ `7 z
printf("%d\n",*shm);6 q: G4 O% `& |7 n: x
. V0 j4 ^9 w; S% z7 s5 h* s; E struct sembuf sem_release = {0,-1,IPC_NOWAIT};8 a6 f D; m4 z- t
semop(semid,&sem_release,1);
/ @- ^+ U7 C; [+ p( _* b
5 C' ~( S1 d; t+ Z shmdt(shm);3 \8 {0 N6 y0 G+ ]
}
9 E% p' c5 Q2 ~* _ " P5 [ o, `( O9 C* W
3 E" ?( v$ F, p9 Y5 v 这个程序需要守护进程模式.请问怎么改呢?:confused: