Linux下进程操作

linux下多进程同时操作文件 我们都知道多进程同时操作文件会出现问题,但是具体会出现什么问题呢?不知道大家有没有仔细研究过,今天我就带大家一起来研究一下。      在操作文件之前,很有必要了解一下内核中文件的存储和访问方式:       这张图摘自《APUE》,我觉得画的很好,所以就没有自己再画了。        从图中能够看出每个进程都有自己独立的一个进程表项,由文件指针指向文件表项;在文件表项中两个很重要的东西 阅读详情
         什么是程序,什么是进程呢? 通俗的讲程序是一个包含可以执行代码的文件,是一个静态的文件.而进程是一个开始执行但是还没有结束的程序的实例.就是可执行文件的具体实现. 一个程序可能有许多进程,而每一个进程又可以有许多子进程.依次循环下去,而产生子孙进程. 当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用.在系统里面只有进程没有程序,为了区分各个不同的进程,系统给每一个进程分配了一个ID(就象我们的身份证)以便识别. 为了充分的利用资源,系统还对进程区分了不同的状态.将进程分为新建,运行,阻塞,就绪和完成五个状态. 

a.进程的标志
#include<unistd.h>/*包含访问进程的函数*/
#include<pwd.h> //包含访问用户信息到头文件
#include<sys/types.h>
#include<stdio.h>
int main(int argc,char **argv)
{
pid_t my_pid,parent_pid;
uid_t my_uid,my_euid;
gid_t my_gid,my_egid;
struct passwd *my_info;
my_pid=getpid();
parent_pid=getppid();
my_uid=getuid();
my_euid=geteuid();
my_gid=getgid();
my_egid=getegid();
my_info=getpwuid(my_uid);
printf("Process ID:%d\n",my_pid);
printf("Parent ID: %d\n",parent_pid);
printf("User ID:%d\n",my_uid);
printf("Effective User ID:%d\n",my_euid);
printf("Group ID: %d\n",my_gid);
printf("Effective Group ID: %d\n",my_egid);
if(my_info)
{
printf("My Login Name: %s\n",my_info->pw_name);

printf("MY Password :%s\n" ,my_info->pw_passwd);
printf("My User ID :%d\n",my_info->pw_uid);
printf("My Group ID :%d\n",my_info->pw_gid);
printf("My Real Name:%s\n" ,my_info->pw_gecos);
printf("My Home Dir :%s\n", my_info->pw_dir);
printf("My Work Shell:%s\n", my_info->pw_shell);

}
return 0;
}

如图:

 

输出结果如下:


b.进程的创建
#include <unistd.h>;
创建一个进程的系统调用只要调用fork 函数。pid_t fork();
    当一个进程调用了fork 以后,系统会创建一个子进程.这个子进程和父进程不同的地方只
有他的进程ID 和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样.当然创建
两个一模一样的进程是没有意义的.为了区分父进程和子进程,我们必须跟踪fork 的返回
值. 当fork 掉用失败的时候(内存不足或者是用户的最大进程数已到)fork 返回-1,否则
fork 的返回值有重要的作用.对于父进程fork 返回子进程的ID,而对于fork 子进程返回0.我
们就是根据这个返回值来区分父子进程的. 父进程为什么要创建子进程呢?前面我们已经
说过了Linux 是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源.有时
进程为了早一点完成任务就创建子进程来争夺资源. 一旦子进程被创建,父子进程一起从
fork 处继续执行,相互竞争系统的资源.有时候我们希望子进程继续执行,而父进程阻塞直
到子进程完成任务.这个时候我们可以调用wait 或者waitpid 系统调用.

实例:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <errno.h>//错误信息头文件
#include <math.h>
void main(void)
{
pid_t child;
int status;
printf("This will demostrate how to get child status\n");
if((child=fork())==-1)
{
printf("Fork Error :%s\n",strerror(errno));
exit(1);
}
else if(child==0)//对于父进程fork返回子进程到ID,而对于fork子进程则返回0
{
int i;
printf("I am the child:%d\n",getpid());
for(i=0;i<1000000;i++) sin(i);
i=5;
printf("I exit with %d\n",i);
exit(i);
}

/*一旦子进程被创建,父子进程一起从fork 处继续执行,相互竞争系统的资源.有时候我们希望子进程继续执行,而父进程阻

塞直到子进程完成任务.这个时候我们可以调用wait 或者waitpid 系统调用
*/
//wait 系统调用会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号
/*如果
没有父进程没有子进程或者他的子进程已经结束了wait 回立即返回.成功时(因一个子进
程结束)wait 将返回子进程的ID,否则返回-1,
*/
while(((child=wait(&status))==-1)&(errno==EINTR));
if(child==-1)
printf("Wait Error:%s\n",strerror(errno));
else if(!status)
printf("Child %d terminated normally return status is zero\n",
child);
else if(WIFEXITED(status))
printf("Child %d terminated normally return status is %d\n",
child,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
printf("Child %d terminated due to signal %d znot caught\n",
child,WTERMSIG(status));

}

如图:

 


c.守护进程的创建

怎么把一个程序放到后台去执行呢?我们只要在命令后面加上&符号SHELL 就会把我们的
程序放到后台去运行。"开发"一个后台检查邮件的程序.这个程序每个一个指
定的时间回去检查我们的邮箱,如果发现我们有邮件了,会不断的报警。
后台进程的创建思想: 首先父进程创建一个子进程.然后子进程杀死父进程,信号处理所有的工作由子进程来处理.
#include <unistd.h>;
#include <sys/types.h>;
#include <sys/stat.h>;
#include <stdio.h>;
#include <errno.h>;
#include <fcntl.h>;
#include <signal.h>;
/* Linux 的默任个人的邮箱地址是 /var/spool/mail/用户的登录名 */
#define MAIL "/var/spool/mail/hoyt"
/* 睡眠10 秒钟 */
#define SLEEP_TIME 10
main(void)
{
pid_t child;
if((child=fork())==-1)
{
printf("Fork Error:%s\n",strerror(errno));
exit(1);
}
else if(child>;0)
while(1);
if(kill(getppid(),SIGTERM)==-1)
{
printf("Kill Parent Error:%s\n",strerror(errno));
exit(1);
}
{
int mailfd;
while(1)
{
if((mailfd=open(MAIL,O_RDONLY))!=-1)
{
fprintf(stderr,"%s","\007");
close(mailfd);
}
sleep(SLEEP_TIME);
}
}
}

如图:

MailNotifier:后台守护程序,用于检查收件箱中是否有新消息 消息通知守护程序 这是一个桌面消息通知守护程序,可以让它在后台运行以检查多个电子邮件帐户是否有新邮件。 仅支持POP3来检查邮箱,将来还会增加对其他协议的支持。 用法 Usage of mnd: -d="": The directory in which the database will be stored -f="": The configuration file in which the user settings are stored -g=false: Generate a configuration file -v=false: debugging/verbose information 您可以使用-g标志为stdout生成示例配置,该配置可以重定向到文件(mnd -g> mnd.conf)。 配置文件名应为mnd.conf,并遵循freedesktop规范来查 立即下载

相关推荐

介绍linux下的c语言.pdf

Linux程序设计入门-- 基础知识 ..................................................................................1 2)Linux程序设计入门-- 进程介绍 ..................................................................................5 3)Linux程序设计入门-- 文件操作 ................................................................................ 11 4)Linux程序设计入门-- 时间概念 ................................................................................19 5)Linux程序设计入门-- 信号处理 ................................................................................21 6)Linux程序设计入门-- 消息管理 ................................................................................27 7)Linux程序设计入门-- 线程操作 ................................................................................35 8)Linux程序设计入门-- 网络编程 ................................................................................39 9)Linux下C 开发工具介绍..........................................................................................69

3、守护进程的创建

3、守护进程的创建 如果你在DOS 时代编写过程序,那么你也许知道在DOS 下为了编写一个常驻内存的程 序我们要编写多少代码了.相反如果在Linux 下编写一个"常驻内存"的程序却是很容易的.我 们只要几行代码就可以做到. 实际上由于Linux 是多任务操作系统,我们就是不编写代码 也可以把一个程序放到后台去执行的.我们只要在命令后面加上&符号SHELL 就会把我们 的程序放到后台去运行

autumn20080101的专栏 1028

检查邮件服务器的邮件信息的程序

检查邮件服务器的邮件信息的程序源代码(支持SOCKS代理)

Linux系统编程1.进程

1. 进程的概念Linux操作系统是面向多用户的,在同一时间可以有许多用户向操作系统发出各种命令。在现代操作系统中,都有程序和进程的概念。 通俗的讲:程序是一个包含可以执行代码的文件,是一个静态的文件;而进程是一个开始执行但还没有结束的程序实例,就是可执行文件的具体实现。 一个程序可能有许多进程,而每一个进程又可以有许多的子进程,依次循环下去,而产生子孙进程。 当程序被系统调用到内存以后

你的牌打的太好啦 979

邮件检查程序 v1.0检查你的邮箱是否有了新的邮件

每天在上班时间想看自己的邮箱的邮件都要到网页去登录检查,但一般的时候都 是没有新邮件或者早就有新邮件了。所以就做了这个简单的新邮件检查程序,它会自 己检查你的邮箱是否有了新的邮件,并且会弹出一个对话框来通知你!这样就方便多 了!

信息流广告ROI线性预测看板&投放分析监控看板展示&数据处理入库全流程

此看板数据量太大,在tableau public部署运行速度极慢,因此用图片作展示 数据清洗

Larry_Westside的博客 2316

Linux程序设计入门

Linux下进程的创建 进程的概念 什么是程序,什么是进程呢?通俗的讲程序是一个包含可以执行代码的文件,是一个静态的文件.而进程是一个开始执行但是还没有结束的程序的实例.就是可执行文 件的具体实现.一个程序可能有许多进程,而每一个进程又可以有许多子进程.依次循环下去,而产生子孙进程. 当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程

大磊大的专栏 1582

保姆级教程:用Kvaser DB Editor从零创建你的第一个DBC文件(附CAN信号属性详解)

本文提供了一份详细的Kvaser DB Editor教程,指导用户从零开始创建DBC文件,并深入解析CAN信号属性的关键设置。通过步骤清晰的安装指南、信号属性配置详解和实用技巧,帮助工程师和学生快速掌握CAN总线通信的核心工具,提升工作效率。

weixin_27076351的博客 247

Linux 进程操作

本文总结了Linux系统中20个常用进程操作函数,包括进程创建(fork)、程序执行(exec系列)、进程控制(waitpid)、进程信息获取(getpid等)、进程间通信(pipe)、文件操作(read/write)和信号处理(signal)等。每个函数介绍了基本作用、参数列表、返回值和使用示例,涵盖了进程管理的主要功能。这些函数是开发Linux多进程应用程序的基础工具,掌握它们对系统编程至关重要,可用于实现进程创建、同步、通信等核心功能。

愿青春不负梦想 1085

从零到一:用CubeMX和485模块快速上手多摩川绝对式编码器(附清零操作详解)

本文详细介绍了如何使用STM32CubeMX和485模块快速上手多摩川绝对式编码器,包括硬件连接、STM32配置、协议解析及清零操作。通过具体的代码示例和调试技巧,帮助开发者高效实现编码器数据读取和清零功能,特别适合STM32单片机开发者参考。

weixin_30599769的博客 191

PMOS过压保护电路设计与仿真优化策略

本文深入探讨PMOS过压保护电路(OVP)的设计与仿真优化策略,详细解析PMOS管选型、稳压管特性及三极管配置等关键要素。通过Proteus仿真案例揭示典型设计误区,并提供响应速度提升、抗干扰设计等进阶优化方案,助力工程师实现高可靠性的电源保护系统设计。

weixin_42620340的博客 440

【Linux】操作系统及进程概念

Linux操作系统与进程概念

m0_68931081的博客 1万+

一步到位解决Docker拉取镜像失败的问题!超详细的Docker代理设置教程!(使用代理解决群晖Docker获取注册表失败的问题)

一步到位解决Docker拉取镜像失败的问题!超详细的Docker代理设置教程!(使用代理解决群晖Docker获取注册表失败的问题)

XiaoqiangClub的博客 1万+

【Linux】进程的概念及操作进程

本文主要讲了进程的概念,什么是进程,描述一个进程的PCB进程控制块是什么,进程属性和文件属性的关系,还有一些关于进程的操作如:查看进程、关闭进程,有讲了一些进程的特性。最后讲了三个系统调用,getpid获取进程PID,getppid获取进程的PPID(父进程id),最后一个是fork创建子进程,简答了几个子进程创建后的问题。

m0_52094687的博客 2686

AMBA-CHI协议详解(七)

本节描述该协议包含的支持系统保序需求的机制。

Crazzy_M的博客 1158

预测股票价格趋势:使用MATLAB进行股票价格预测

通过收集股票数据、数据预处理、构建预测模型以及可视化结果,我们可以利用MATLAB强大的计算和分析功能来预测股票价格的走势。然而,需要注意的是,股票市场具有高度复杂性和不确定性,预测结果仅供参考,并不构成投资建议。然而,借助计算机编程和数据分析工具,我们可以利用历史股价数据来建立模型,并预测未来的股票价格走势。首先,我们需要获取股票的历史价格数据。完成模型的拟合后,我们可以使用该模型来进行未来股票价格的预测。最后,我们可以使用MATLAB的绘图功能将预测的股票价格与实际股票价格进行对比,并进行可视化展示。

2301_79326588的博客 1018

Linux系统——进程操作

默认情况下,所有指令都是在前台运行(占着命令提示符 )stress,系统压测工具,模拟进程操作,测试系统性能。进程(process), 系统进行资源分配的最小单位。cpu按时间切片的方式执行多个进程,进程才会状态之分。1、建议写命令的全路径 【针对源码软件的命令】2、%默认识别为命令的结束符,需要转义, %R:运行, D/S:睡眠, +:前台。

u010198709的博客 1648

ESP32与DS18B20温度传感器的数据采集与告警系统

并且,通过自定义的微信告警功能,我们可以及时收到温度超过阈值的告警消息。随着物联网的快速发展,传感器在各种应用场景中发挥着重要的作用。本文将介绍如何使用ESP32微控制器与DS18B20温度传感器结合,通过串口输出和Web服务器实现温度数据的采集和监控,并使用自定义微信告警功能。上传完成后,打开串口监视器,您将看到ESP32连接到Wi-Fi网络,并开始监测温度。在您的计算机或移动设备上,打开一个Web浏览器,并输入ESP32的IP地址。在浏览器中输入ESP32的IP地址后,您将看到显示当前温度的页面。

loop_class349的博客 2242

【Linux仓库】进程概念与基本操作【进程·贰】

本文摘要:本文介绍了Linux中进程的基本概念与操作。进程由内核数据结构(PCB)和代码数据组成,操作系统通过链表管理多个进程。讲解了进程属性(PID、状态、优先级等)和进程切换机制(上下文保存与恢复)。通过/proc系统文件夹和ps工具可查看进程信息,包括父进程PPID。重点阐述了fork系统调用创建子进程的过程及其双返回值特性(父进程返回子进程PID,子进程返回0),为后续学习进程管理和虚拟地址空间奠定基础。

egoist2023的博客 2083

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux操作系统1-进程1(操作系统,进程介绍,Linux进程相关命令,getpid,fork)

Linux下介绍操作系统和进程相关知识

yzc的博客 1516

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Linux】进程的基础概念 进程的相关操作 进程的状态

进程的基础概念 进程的相关操作 进程的状态

一点一点变好 2092

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Linux编程之进程操作

文章目录1进程相关的命令行操作2前台进程与后台进程 1进程相关的命令行操作 何为进程? 程序文件:helloworld 进程:当helloworld被运行后,在操作系统内创建一个进 程对象。 也就是说,进程是一个运行时的对象。而程序文件只是一 个文件。 注:helloworld可以被运行多次,每运行一次,都产生一 个进程。 注:我们通常所说的“程序”,有的时候指代码,有的是 时候指程序文件...

爱吃蛋炒饭蜗牛君的博客 221

linux操作系统进程

linux操作系统是对下的软硬件进行管理,为了能够对上提供稳定,快速,安全的服务而诞生的软件。广义上的操作系统是包含搭载在操作系统上的软件和函数库等文件的。狭义上的操作系统就是操作系统内核,进行进程管理,文件管理,驱动管理,内存管理而linux对用户提供服务的方式是系统调用接口,系统调用接口实际上是用c语言实现的操作系统内部的函数调用。因为操作系统不相信用户,所以就用有限制的系统调用接口来为用户提供服务。

2401_82609762的博客 1005
上一篇: Linux下C的编译和链接
下一篇: linux下socket 编程
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值