【求助】如何让自己的进程成为守护进程
#include <stdio.h>( m# i/ R+ ~0 A
#include <sys/ipc.h>
/ e$ ]3 q# D; y4 ], r' \$ n #include <sys/sem.h>8 ^. G4 I# m5 X" W7 _9 Y" J2 P# N
#include <sys/shm.h>
5 D- J! v8 I1 a q, s+ f #include <sys/types.h>
! y) n4 x) \ z9 w$ N #include <sys/stat.h>+ Q$ u1 q+ ^# ~/ z3 Y+ {
/ K. c) n' @0 v! [0 d6 b- G1 K union semun
1 o( d& p. a% i. E {
' ~ K8 g0 Z% ~ int val;3 V" ]1 {/ y& f: K0 j6 q9 W
struct semid_ds *buf;
6 g1 I! `: h- z' i: _ unsigned short *array;6 Q; R" K. L3 E) r d
}arg;' O% p- O3 M- K9 H
) u$ i" U4 I/ [5 C* ` //生成信号量
" [1 d5 W r: k% X( J* _% L int sem_creat(key_t key)
$ e# N. _( a" g {
( |/ G% F7 @7 z union semun semopts;
% y, S8 F9 K" o int semid;- B& l, Y- p; V6 G. O& T: {
- p9 Z. \* ]/ @: l8 H' m3 d
semopts.val = 0;, z' }5 ~1 m3 H; ?6 Y
semid = semget(key, 1, IPC_CREAT|0666);
# s4 K# _5 F% P/ V) {# U3 E
* C6 @3 z2 r7 B3 g: s) j if (semid == -1)( N7 v8 V1 [2 ?: x% r
{ C2 R. P5 l1 V
printf("creat semaphore error\n");0 Q6 {6 l$ P' P( f* H
exit(-1);
# |0 ~/ x6 R- j. E1 f) ^ }
; B% Q- {, v; w. [ semctl(semid, 0, SETVAL, semopts); //信号量初始化
3 W# _4 d" q5 m2 {$ X return semid;: i; o. e5 c' K# |* E! ]/ w
}' w8 }% {- d( ^9 ~
) l1 _ [) [4 e1 R6 t
main()4 T2 e1 u: b0 c7 g% b7 U
{9 }1 I/ L+ ?8 H6 r$ I+ U% L
key_t key;
# Q! ]( Y* }, q# H union semun sem;" P6 ~/ S- }. W( ?
int semid, shmid;
/ R; C' s: x0 p/ K int *shm;/ d. L( a) ~4 p- N7 v
long int i;
8 Y+ E' J \% G; q, G8 ? int size;
L8 m( g j& Q& d% ? 6 p# K* H, h+ G. Q' ^9 ]7 ^0 K: l
size = sizeof(long int);5 _; O# U, _+ ^2 I y
key = ftok("./3",0);
) o$ i/ m' e9 o shmid = shmget(key, size, IPC_CREAT|S_IRUSR|S_IWUSR);: A$ T1 W9 Q6 I; \7 Z% b
- V$ q4 Y0 y6 H6 y2 g, l9 p& N if (shmid == -1)
% |6 f+ f; s' {# h9 @ {
" W0 F* K% ?- I+ o& O perror("failed to create/get shm");
2 L% u) B; S5 P% B! ~5 c return -1;" v5 k. L$ t% |( ^% d. E& c
}4 j4 s5 G- O$ h4 n" r. ?
7 q2 J. X2 F& D# n! P" t
shm = shmat(shmid, 0, 0);
) |' l/ f/ Z! l+ z6 @$ Z2 c( o semid = sem_creat(key);1 L$ f7 P0 \; Z( F8 m
: b# L) u+ A1 f/ S
struct sembuf sem_get = {0,+1,IPC_NOWAIT};7 S& y+ @ b# `
semop(semid,&sem_get,1);
7 C& B2 E, V2 } Z
% m I, U/ @! f' d. Q* s for(i = 0;i<5000000;i++)+ T7 q, h' v3 K. J8 v% Y
{+ o, j6 K8 Y5 n( a8 s& O
*shm += 1;+ P% O* V! c; G! P
}8 z: t Y3 f+ `% v1 Z# y
printf("%d\n",*shm);8 W0 H1 H# H' p# v8 x* F9 K4 T# W
" ?8 X5 }; x3 F2 i* ^ ^5 P; r
struct sembuf sem_release = {0,-1,IPC_NOWAIT};
% Y# @( d! [- J" [: [ semop(semid,&sem_release,1);. [& n K" m' {! ~8 @6 ~1 @
c) x+ P% i1 k% ~( z shmdt(shm);1 {+ a$ t# I5 y F* n) b
}- \) `) z+ r, O7 I
. g' Q& g. [: k # B! I, Z8 ~. ~7 l0 V/ ~
这个程序需要守护进程模式.请问怎么改呢?:confused: