精华内容
下载资源
问答
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":...广泛应用于容器存储、大数据分析、Web 服务和内容管理、应用程序开发和测试、媒体...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。广泛应用于容器存储、大数据分析、Web 服务和内容管理、应用程序开发和测试、媒体和娱乐工作流程、数据库备份。支持冷热数据分级存储,平均有效存储成本可低至 0.19元/月GB","link1":"https://www.aliyun.com/product/nas","link":"https://www.aliyun.com/product/nas","icon":"https://img.alicdn.com/tfs/TB1SisTRFXXXXbEXpXXXXXXXXXX-128-128.png","btn2":"折扣套餐","tip":"高性价比NAS新品上线,容量型NAS限时99元起! 立即查看","btn1":"立即开通","link2":"https://www.aliyun.com/product/nas","title":"文件存储 NAS"}],"search":[{"txt":"NAS新手入门","link":"https://m.aliyun.com/markets/aliyun/nas_edu01"},{"txt":"产品价格","link":"https://www.aliyun.com/price/product?spm=5176.149973.776685.6.ID90rH#/nas/detail"},{"txt":"最佳实践","link":"https://help.aliyun.com/document_detail/54998.html"},{"txt":"常见问题","link":"https://help.aliyun.com/knowledge_list/42175.html?spm=5176.59209.972911.4.3f6d3f62SVIECT"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"ifIcon":"icon","link":"https://img.alicdn.com/tfs/TB1XY8hGYr1gK0jSZFDXXb9yVXa-1740-328.png","icon":"nas","title":"文件存储 NAS","contentLink":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.1.27543d3eTvR5Bi","des":"阿里云文件存储(Network Attached Storage)是面向阿里云ECS、HPC和Docker的共享文件存储服务,支持linux和window客户端多种标准文件访问协议,无限容量及性能扩展、单一命名空间,企业级安全防护。","btn1":"立即开通","link1":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.2.27543d3eTvR5Bi","btn2":"产品文档","link2":"https://help.aliyun.com/product/27516.html?spm=5176.cnnas.0.0.42216689Kvc7ZO","link3":"https://nasnext.console.aliyun.com/overview?spm=5176.cnnas.0.0.42216689Kvc7ZO","btn3":"管理控制台","infoGroup":[{"infoName":"产品入门","infoContent":{"firstContentName":"NAS使用流程","firstContentLink":"https://help.aliyun.com/document_detail/148430.html?spm=a2c4g.11174283.6.564.b9c74da2J1uIZi","lastContentName":"挂载NAS到系统","lastContentLink":"https://help.aliyun.com/document_detail/27526.html?spm=a2c4g.11186623.6.566.1872495fTbU32y"}},{"infoName":"最新动态","infoContent":{"firstContentName":"极速型性能提升340%","firstContentLink":"https://yq.aliyun.com/articles/761833?spm=5176.cnnas.0.0.25216689DjruaG","lastContentName":"NAS低频型发布","lastContentLink":"https://yq.aliyun.com/articles/762197?spm=5176.cnnas.0.0.25216689DjruaG"}}]}]}

    {"$env":{"JSON":{}},"$page":{"env":"production"},"$context":{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。广泛应用于容器存储、大数据分析、Web 服务和内容管理、应用程序开发和测试、媒体和娱乐工作流程、数据库备份。支持冷热数据分级存储,平均有效存储成本可低至 0.19元/月GB","link1":"https://www.aliyun.com/product/nas","link":"https://www.aliyun.com/product/nas","icon":"https://img.alicdn.com/tfs/TB1SisTRFXXXXbEXpXXXXXXXXXX-128-128.png","btn2":"折扣套餐","tip":"高性价比NAS新品上线,容量型NAS限时99元起! 立即查看","btn1":"立即开通","link2":"https://www.aliyun.com/product/nas","title":"文件存储 NAS"}],"search":[{"txt":"NAS新手入门","link":"https://m.aliyun.com/markets/aliyun/nas_edu01"},{"txt":"产品价格","link":"https://www.aliyun.com/price/product?spm=5176.149973.776685.6.ID90rH#/nas/detail"},{"txt":"最佳实践","link":"https://help.aliyun.com/document_detail/54998.html"},{"txt":"常见问题","link":"https://help.aliyun.com/knowledge_list/42175.html?spm=5176.59209.972911.4.3f6d3f62SVIECT"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"ifIcon":"icon","link":"https://img.alicdn.com/tfs/TB1XY8hGYr1gK0jSZFDXXb9yVXa-1740-328.png","icon":"nas","title":"文件存储 NAS","contentLink":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.1.27543d3eTvR5Bi","des":"阿里云文件存储(Network Attached Storage)是面向阿里云ECS、HPC和Docker的共享文件存储服务,支持linux和window客户端多种标准文件访问协议,无限容量及性能扩展、单一命名空间,企业级安全防护。","btn1":"立即开通","link1":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.2.27543d3eTvR5Bi","btn2":"产品文档","link2":"https://help.aliyun.com/product/27516.html?spm=5176.cnnas.0.0.42216689Kvc7ZO","link3":"https://nasnext.console.aliyun.com/overview?spm=5176.cnnas.0.0.42216689Kvc7ZO","btn3":"管理控制台","infoGroup":[{"infoName":"产品入门","infoContent":{"firstContentName":"NAS使用流程","firstContentLink":"https://help.aliyun.com/document_detail/148430.html?spm=a2c4g.11174283.6.564.b9c74da2J1uIZi","lastContentName":"挂载NAS到系统","lastContentLink":"https://help.aliyun.com/document_detail/27526.html?spm=a2c4g.11186623.6.566.1872495fTbU32y"}},{"infoName":"最新动态","infoContent":{"firstContentName":"极速型性能提升340%","firstContentLink":"https://yq.aliyun.com/articles/761833?spm=5176.cnnas.0.0.25216689DjruaG","lastContentName":"NAS低频型发布","lastContentLink":"https://yq.aliyun.com/articles/762197?spm=5176.cnnas.0.0.25216689DjruaG"}}]}]}}

    展开全文
  • linux下防止某个程序被运行两次的方法 通过文件锁来实现,在程序运行的一开始,检查某文件是否存在,如果存在则说明改程序已经在运行了,如果不存在则利用open语句创建该文件,程序退出时关闭并删除此文件。...
     
    在linux下防止某个程序被运行两次的方法

       
      通过文件锁来实现,在程序运行的一开始,检查某文件是否存在,如果存在则说明改程序已经在运行了,如果不存在则利用open语句创建该文件,程序退出时关闭并删除此文件。
      
      具体代码:
      
      static char file_lock[sizeof(ctl_addr.sun_path)] = /var/run/file.pid;
      static bool file_lock_created = FALSE;
      
      static int
      create_lock(void)
      {
       int fd = open(file_lock, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC,
       S_IRUSR | S_IRGRP | S_IROTH);
      
       if (fd < 0)
       {
       if (errno == EEXIST)
       {
       fprintf(stderr, "file: lock file /"%s/" already exists/n", file_lock);
       exit_file(10);
       }
       else
       {
       fprintf(stderr, "file: unable to create lock file /"%s/" (%d %s)/n"
       , file_lock, errno, strerror(errno));
       exit_file(1);
       }
       }
       file_lock_created = TRUE;
       return fd;
      }
      
      static bool
      fill_lock(int lockfd)
      {
       char buf[30]; /* holds "/n" */
       pid_t pid;
       int len;
      
       pid = getpid();
       len = snprintf(buf, sizeof(buf), "%u/n", (unsigned int) pid);
       bool ok = len > 0 && write(lockfd, buf, len) == len;
      
       close(lockfd);
       return ok;
      }
      
      static void
      delete_lock(void)
      {
       if (file_lock_created)
       {
       //delete_ctl_socket();
       unlink(file_lock); /* is noting failure useful? */
       }
      }
    展开全文
  • linux c 检查程序是否运行 检查进程存在的五种方法: 通过wait()函数来监控: 这种方法只适用于父子进程之间,父进程可以使用该函数对子进程进行监控 信号量和文件锁: 如果某个进程一直持有某个信号量或者文件锁...

    linux c 检查程序是否运行

    检查进程存在的五种方法:

    1. 通过wait()函数来监控: 这种方法只适用于父子进程之间,父进程可以使用该函数对子进程进行监控 信号量和文件锁:
    2. 如果某个进程一直持有某个信号量或者文件锁,并且该文件锁或者信号量一直处于被监控状态,那么当可以获取到信号量和文件锁的时候说明该进程已经终止
    3. 进程间IPC通信机制:可以通过进程间通信的某些机制来实现对某一个进程的监控,比如FIFO,可以给被监控进程管道的读端,当写端写入失败的时候,说明该进程也已经结束,还可以通过socket,让被监控进程和监控进程间建立socket,监控该socket的连接状态就可以知道被监控进程有没有退出
    4. 查看/prco/PID: 通过这种方式可以调用stat()等函数实现对进程的查看
    5. kill(pid,0):通过向被监控进程发送sigid 为0的信号,若返回失败且errno为ESRCH说明该进程不存在

    注意:4、5两种方法有可能存在一定的风险,因为linux系统会重用进程ID,当被监控进程终止后,linux进程可能重用该进程ID,所以监控的可能不是之前的进程。

    方法4、5示例代码1:

    /* 通过PID文件判断进程是否运行 */
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    #include <signal.h>
     
    static  char starter_pid_file_default[] =  "/var/run/test.pid";
     
     
    static bool check_pid(char *pid_file)
    {
        struct stat stb;
        FILE *pidfile;
     
        if (stat(pid_file, &stb) == 0)
        {
            pidfile = fopen(pid_file, "r");
            if (pidfile)
            {
                char buf[64];
                pid_t pid = 0;
                memset(buf, 0, sizeof(buf));
                if (fread(buf, 1, sizeof(buf), pidfile))
                {
                    buf[sizeof(buf) - 1] = '\0';
                    pid = atoi(buf);
                }
                fclose(pidfile);
                if (pid && kill(pid, 0) == 0)
                {    /* such a process is running */
                    printf("pid=%d",pid);
                    return 1;
                }
            }
            printf("removing pidfile '%s', process not running", pid_file);
            unlink(pid_file);
        }
        return 0;
    }
     
     
    int main()
    {
        FILE *fd = fopen(starter_pid_file_default, "w");
     
        if (fd)
        {
            fprintf(fd, "%u\n", getpid());
            fclose(fd);
        }
        if (check_pid(starter_pid_file_default))
        {
            printf("test is already running (%s exists)\n", starter_pid_file_default);
            
        }
        else
            printf("test is NOT running (%s NOT exists)\n", starter_pid_file_default);
        
        unlink(starter_pid_file_default);
        
        
        return 0;
        
    }
    
    

    方法4、5示例代码2:

    snprintf(pid_file, sizeof(pid_file), "/var/run/%s.pid", progname); 
    
    int check_daemon_running(const char *pid_file)
    {
        int retVal = -1; 
        struct stat fStatBuf;
     
        retVal = stat(pid_file, &fStatBuf); 
        if (0 == retVal) 
        { 
            pid_t pid = -1; 
            printf("PID record file \"%s\" exist.\n", pid_file);
     
            pid = get_daemon_pid(pid_file);
            if (pid > 0)  /*  Process pid exist */
            { 
                if ((retVal = kill(pid, 0)) == 0) 
                { 
                    printf("Program with PID[%d] seems running.\n", pid); 
                    return 1; 
                } 
                else   /* Send signal to the old process get no reply. */ 
                { 
                    printf("Program with PID[%d] seems exit.\n", pid); 
                    remove(pid_file); 
                    return 0; 
                } 
            } 
            else if (0 == pid) 
            { 
                printf("Can not read program PID form record file.\n"); 
                remove(pid_file); 
                return 0; 
            } 
            else  /* Read pid from file "pid_file" failure */
            { 
                printf("Read record file \"%s\" failure, maybe program still running.\n", pid_file); 
                return 1; 
            } 
        } 
        
        return 0;
    }
    

    **示例代码3:**详情见https://blog.csdn.net/qq_46042542/article/details/105813198

    #include <stdio.h>
    #include <string.h>
    #include <libgen.h>
    #include <stdlib.h>
    int  check_run(char *proname)
    {
    	FILE		*fp = NULL;
    	char            command[150];
    	char            buf[300];
    	int             count = 3;
    
    	/******************************************************
    
    		ps -ef列出相关进程的信息  
    		grep -w %S精确字符串的匹配  
    		wc -l显示数据有几行,用此来判断程序是否存在 
    		
    		注意的是grep是一个单独的进程,popen会执行一个sh -c .... 的进程,
    		所以需设置count为3
    
    	******************************************************/
    	snprintf(command, sizeof(command), "ps -ef | grep -w %s | wc -l ", proname);
    
    	fp=popen(command, "r");
    	if( !fp )
    	{
    		printf("popen errno\n");
    		return -1;
    	}
    
    	if((fgets(buf, sizeof(buf), fp)) != NULL)
    	{
    		count = atoi(buf);
    		printf("%d\n", count);
    	}
    
    	/*snprintf(command, sizeof(command), "ps -ef | grep -w %s ", proname);
    	fp=popen(command, "r");
    	while( count != 7)
    	{
    		fgets(buf, sizeof(buf), fp);
    		printf("%s",buf);
    		count++;
    	}*/
    
    	pclose(fp);
    	fp = NULL;
    
    	if((count -3) == 0)
    	{
    		return 0;
    	}
    	else
    	{
    		return 1;
    	}
    	
    *int   main(int argc, char **argv)
    {
    	int    rv;
    	char   *progname=NULL;	
    	progname=basename(argv[0]);
    	printf("%s\n", progname);
    	rv = check_run(progname);
    	printf("%d\n", rv);
    	while(1)
    	{};
    }
    

    pid_t定义

    pid_t 类型在 Linux 环境编程中用于定义进程 ID,需要引入头文件<sys/types.h>,

    #include<sys/types.h>//pid_t定义在这个头文件中
    #include<unistd.h>   //意为unix std,是POSIX标准定义的,包含许多系统服务的函数原型
    pid_t getpid(void);//返回调用进程的PID
    pid_t getppid(void);//返回父进程的PID
    //pid_t 在types.h中被定义为int
    

    获取pid_t的字节长度

    #include <iostream>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        pid_t pid;
        cout <<"sizeof(pid_t)="<< sizeof(pid_t) << endl;     
        return 0;
    }
    

    运行结果

    [root@localhost test]# g++ test.cpp -o test
    [root@localhost test]# ./test
    sizeof(pid_t)=4
    

    获取当前进程的ID

    #include <iostream>
    #include <unistd.h>
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        pid_t pid = getpid();
        cout <<"pid="<<pid << endl;     
        return 0;
    }
    

    运行结果

    [root@localhost test]# g++ test.cpp -o test
    [root@localhost test]# ./test
    pid=1006
    

    stat函数

    • 作用:获取文件信息
      头文件:include <sys/types.h> #include <sys/stat.h> #include <unistd.h>
      ​函数原型:int stat(const char *path, struct stat *buf)
      ​返回值:成功返回0,失败返回-1;
      ​参数:文件路径(名),struct stat 类型的结构体
    struct stat {
        dev_t         st_dev;       //文件的设备编号
        ino_t         st_ino;       //节点
        mode_t        st_mode;      //文件的类型和存取的权限
        nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1
        uid_t         st_uid;       //用户ID
        gid_t         st_gid;       //组ID
        dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号
        off_t         st_size;      //文件字节数(文件大小)
        unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)
        unsigned long st_blocks;    //块数
        time_t        st_atime;     //最后一次访问时间
        time_t        st_mtime;     //最后一次修改时间
        time_t        st_ctime;     //最后一次改变时间(指属性)
    };
    

    错误代码:

    ENOENT         参数file_name指定的文件不存在
    ENOTDIR        路径中的目录存在但却非真正的目录
    ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接
    EFAULT         参数buf为无效指针,指向无法存在的内存空间
    EACCESS        存取文件时被拒绝
    ENOMEM         核心内存不足
    ENAMETOOLONG   参数file_name的路径名称太长
    
    展开全文
  • which [root@iZ94d74d2reZ opt]# which redis-server /usr/local/bin/redis-...which命令是查找命令是否存在,以及命令的存放位置在哪儿。 2.whereis whereis命令只能用于搜索程序名,而且只搜索二进制文件(参数

    which

    [root@iZ94d74d2reZ opt]# which redis-server
    /usr/local/bin/redis-server
    

    whereis

    [root@sss opt]# whereis redis-server
    redis-server: /usr/local/bin/redis-server
    

    两者区别
    1.which

    which命令是查找命令是否存在,以及命令的存放位置在哪儿。

    2.whereis

    whereis命令只能用于搜索程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

    展开全文
  • 如何判断 Linux 服务器是否被入侵? 本指南中所谓的服务器被入侵或者说被黑了的意思,是指未经授权的人或程序为了自己的目的登录到服务器上去并使用其计算资源,通常会产生不好的影响。 免责声明:若你的服务器被...
  • 出自:...免责声明:若你的服务器被类似 NSA 这样的国家机关或者某个犯罪集团入侵,那么你并不会注意到有任何问题,这些技术也无法发觉他们的存在。然而,大多数被攻破的服务...
  • 如何判断 Linux 服务器是否被***? 本指南中所谓的服务器被***或者说被黑了的意思,是指未经授权的人或程序为了自己的目的登录到服务器上去并使用其计算资源,通常会产生不好的影响。 免责声明:若你的服务器被类似 ...
  • 免责声明:若你的服务器被类似 NSA 这样的国家机关或者某个犯罪集团入侵,那么你并不会注意到有任何问题,这些技术也无法发觉他们的存在。然而,大多数被攻破的服务器都是被类似自动攻击程序这样的程序或者类似...
  • 免责声明:若你的服务器被类似 NSA 这样的国家机关或者某个犯罪集团入侵,那么你并不会注意到有任何问题,这些技术也无法发觉他们的存在。 然而,大多数被攻破的服务器都是被类似自动攻击程序这样的程序或者类似...
  • 块设备的处理 一个进程在某个磁盘文件上发出一个 read() 系统调用,内核对进程请求回应的一般步骤: ...VFS 函数确定所请求的数据是否已经存在,如有必要,它决定如何执行 read 操作。 有时候没有...
  • 在确定某端口开发状态之后,攻击人员就会检查在该端口提供相应的服务的程序版本,以判断这个版本的程序是否存在漏洞,例如说,主机A使用的是数年前的1.0版本的web服务端程序,而且官方发布过这个版...
  • Linux进程相关的概念

    2021-01-07 10:12:33
    Linux进程相关的概念 理清楚以下的5个问题:...a、操作系统提供一个指令ps,配合grep使用查看是否存在某个进程。 b、或者使用top来观察进程。 ps -aux|grep +某个程序 如: CLC@Embed_Learn:~$ ps -aux|grep a.out Warn
  • Linux进程

    2020-12-21 14:42:01
    1.查看进程中是否存在某个进程 例:cp -aux|grep init 2.类似Windows任务管理器 命令:top 2、进程标识符 1.每个进程都有一个标识符(非负整数) Pid=0:交换进程,进程调度(某一时刻哪个进程来跑,CPU,内存,网络) Pid=...
  • linux动态库查找问题

    2020-12-07 16:55:35
    在configure阶段,为了检测安装安装环境是否满足,通常情况下都是通过pkg-config来检测其依赖的动态库是否存在,这一过程pkg-config会去寻找相应库的pc文件。当我们完某个程序后,如果其提供了动态库,在源码中会有...
  • Linux添加环境变量

    2018-09-27 21:46:24
    首先写一个可执行程序 #include "stdio.h" int main() { printf("hello"); return 0; } 然后将它编译成二进制可执行...linux命令行下面执行某个命令的时候,首先保证该命令是否存在,...
  • 一、逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标!...侦测『某个东西』是否存在! 2. 关于程序的逻辑卷标! -G 侦测是否由 GID 所执行的程序所拥有 -O 侦测是否由 UID 所
  • 外部命令:存在于文件系统中某个目录下的单独的程序 shell首先检查是否是内部命令,不是再检查是否应用程序。 搜索路径:能找到可执行程序的目录列表。如果是应用程序,shell会试着在搜索路径($PATH)里寻找应用...
  • 在写Linux服务器上的一些程序时,偶尔会碰到需要搜索某个字段是否存在某个文件中,为了实现这个目的,我们可以使用grep命令 以下是两种通用的使用方法: 从文件中搜索目标字符串 eg: 从file.txt中搜索string: ...
  • /bin里面一般是普通可执行程序,而/sbin里多为系统管理程序和服务程序s应该是system这个单词sudo是给普通用户赋予超级权限,ps常配合grep 查看某个进程是否存在 ps -ef | grep httpd source 命令是更新配置文件命令...
  • Linux 系统常用命令 一、基础命令行 1. htop function:互动的进程...function:检查Nginx进程是否存在。 ps命令:将某个进程显示出来, grep命令:查找,是一种强大的文本搜索工具,它能使用正则表达式搜索文本...
  • 一、逻辑运算符 1、逻辑卷标表示意思 1)关于档案与目录的侦测逻辑卷标 -f 常用!侦测『档案』是否存在 eg:...-e 侦测『某个东西』是否存在! 2)关于程序的逻辑卷标 -G 侦测是否由 GID 所执行的程序所拥有 -O 侦测是否
  • Linux文件搜索命令

    2020-03-07 12:06:57
    使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令 也可以搜索命令所在路径及别名 举例 2、whereis 查看文件的位置 whereis命令只能用于搜索程序名,而且只能搜索二进制文件、...
  • linux下查询命令

    千次阅读 2017-01-01 23:02:28
    也就是说,使用which命令,就可以看到系统命令是否存在,以及执行的到底是哪一个位置的命令。命令格式:which 可执行文件名称 which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。...
  • Linux 中进程管理工具汇总

    千次阅读 2018-05-05 20:36:55
    如果我们的Linux系统整个系统资源快要被耗尽时,我们是否能够找出那个最消耗系统资源的进程,然后删除该进程,让系统恢复正常呢,或者由于某个程序存在BUG,导致产生一系列的问题,有如何查找它并结束进程?...

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

linux是否存在某个程序

linux 订阅