找回密码
 注册
关于网站域名变更的通知
查看: 275|回复: 1
打印 上一主题 下一主题

分享Linux实例进程代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-19 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

3 c% Q4 j  J7 D5 xLinux实例进程代码如下:: v: V  n+ C  D. O( H. n8 M
$ Q6 M& ^4 ~- b% ~

  g9 Y! s/ [5 n& \! C#include <stdio.h>& A5 }$ b% Z& o. y8 E9 p% J8 W
#include <stdlib.h>
3 e% G2 a& h; W, Z: Q/ o! J! W3 W#include <unistd.h>
! Y6 K, p/ [9 k) G2 K#include <fcntl.h>( e) I; D6 ]. P# e* @5 I' e9 J
#include <syslog.h>( a" {& f) V, ^
#include <string.h>; K' U' ~4 O7 j9 ]
#include <errno.h>$ N9 A# _! ^) h. \' k
#include <sys/stat.h>, O4 r$ h- ^2 [! e/ _
& }$ v# D7 u7 f6 C# R2 v( ]$ t9 W
#define LOCKFILE "/var/run/mydaemon.pid"$ g( P' h' o1 N5 @" n: Q! V) l% s: t, J
#define LOCKMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH): f& Z: m5 ]+ A0 O6 v4 t

  k& P* y/ ?8 O8 C2 o) oint lockfile(int fd). Q7 M7 b3 N) a: }$ F  E
{
9 K5 i$ G3 |% p' @        struct flock fl;
( X: T+ }2 B0 I- K9 o' w. I" M
0 c4 k+ R& A; c* U9 e5 a+ s! L( j9 B        fl.l_type = F_WRLCK;/ N- C8 u3 A: O3 |
        fl.l_start = 0;
# J2 `0 D* X5 c/ s" Z* L        fl.l_whence = SEEK_SET;' u$ r$ C* W% x2 Y. \
        fl.l_len = 0;
* \, ~4 ~" H$ M# C) ^& `' P& |
2 [  Q% x, j& F% o  {        return(fcntl(fd, F_SETLK, &fl));
% p( C  z! I7 E; q" `}7 z* Q4 m, F9 b+ e: l! V0 j4 I& [

- \/ f# A3 r: }) u( q- S  ]" }" Lint already_running(const char *filename)
$ D9 j8 p4 ^+ w5 [3 u. J{
& o- p! @7 l* F/ [  @8 {9 }        int fd;
3 ~- J5 f+ @, F7 O        char buf[16];
6 m+ k5 I! H6 j" L) \& l8 ]' L2 V
, i! \$ Z9 P) f' D& a, w        fd = open(filename, O_RDWR | O_CREAT, LOCKMODE);
+ s- v, j2 u- z7 S$ @/ u' `, j        if (fd < 0) {% T8 J6 T' ?" u* M. a( ]# [
                syslog(LOG_ERR, "can't open %s: %m\n", filename);2 Q: c7 z  t4 |# d( p1 d% P+ s7 J
                exit(1);
0 i, f7 P! F0 T0 D6 x% ?' T% P        }2 v: y$ R1 c. J8 Q
        if (lockfile(fd) == -1) {7 A8 a2 @9 A$ P- }$ {
                if (errno == EACCES || errno == EAGAIN) {
0 W7 P% c" E$ T, |6 D, G                        syslog(LOG_ERR, "file: %s already locked", filename);
1 X- g$ Q* X& ?                        close(fd);
& @* F8 J8 n. a4 _                        return 1;0 i( o0 O/ e2 W+ D1 t. \# M9 u+ i
                }
: e# T4 C: I- j" }* T# B                syslog(LOG_ERR, "can't lock %s: %m\n", filename);
# e( Z- T  f0 M+ J6 i- V                exit(1);" D0 K. G/ p  B. m( ?
        }# U5 A: _9 Z# a+ j+ ]6 V0 B& a
        ftruncate(fd, 0);# Z+ x3 z0 E9 C% c
        sprintf(buf, "%ld", (long)getpid());
) Y, E" u- J3 U        write(fd, buf, strlen(buf) + 1);
/ y: b: j/ I: m( p  e. K        return 0;' |+ P& k4 L/ u- G' X/ `
}
" t2 z" k) J; u
" r$ P+ S  w' T# ^# lint main(int argc, char *argv[])5 G3 K  D- {  j
{  }0 e7 W8 ~7 l6 P% X
        if (already_running(LOCKFILE))+ F9 t% [& O' @6 H. x% y5 x
                return 0;. i0 u/ L  a  m% M  g7 |, E2 W( G- ]8 o

" W- ^* P* @5 q- ^( p) W3 v& A        printf("start main...\n");$ C- O- Z) f' F' \; w
        sleep(100);& {+ v& q. [  w% j" _3 X
        printf("main done!\n");8 h1 I! I  k( f) Q
5 t2 g) `- A! k! Z/ q9 E( n3 Q
        exit(0);. A3 G3 ]* _- d/ [/ H+ y) ]) X
}

3 D5 ]! S# H, P: y
: m- O) e; X7 y) L1 ?

: l1 [' p4 r0 z# e" C7 {8 ?) \& c) @( Z8 X/ o6 k# ^2 f# f# V

( D, @* m4 |% q9 n
1 ]( i3 r& B( t) e: h
. Y, V  y0 H4 Y* S9 A% e

该用户从未签到

2#
发表于 2019-9-19 18:08 | 只看该作者
看看楼主的分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-23 20:34 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表