广告
返回顶部
首页 > 资讯 > 操作系统 >Linux操作系统 进程之间的通信
  • 726
分享到

Linux操作系统 进程之间的通信

2023-06-05 17:06:30 726人浏览 独家记忆
摘要

 进程之间的通信预备知识:用户态和内核态,当一个进程在执行用户自己的代码时处于用户运行态(用户态);当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态)。进程之间的通信(Inter Processs Communic

 进程之间的通信

预备知识:

用户态和内核态,当一个进程在执行用户自己的代码时处于用户运行态(用户态);当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态)。

Linux操作系统 进程之间的通信

进程之间的通信(Inter Processs Communication-IPC)实现机制有:管道、消息队列、信号值、信号、共享内存、共享映射文件、套接字等。

及时通信:信号(类似中断);非及时通信:共享内存、邮箱、管道、套接字、

常见的信号:终止信号、定时器信号、用户自定义信号等

信号:用户、系统或者进程发送给目标进程信息,以通知目标进程某个状态的改变系统异常

PCB(progress control block-进程控制块),系统通过PCB,描述进程和控制进程。在linux系统下,PCB是 task_struct结构体(进程描述符)
  1、进程状态:记录进程是处于运行状态还是等待状态
  2、调度信息:进程由哪个函数调度,具体怎样调度等
  3、进程之间的通讯状况
  4、进程之间的亲属关系:在父进程和子进程之间有task_struct类型的指针,将父进程和子进程联系起来
  5、时间数据信息:每个进程执行所占用CPU的时间
  6、进程的标志
  7、进程的标识符:该进程唯一的标识符用来区别其他进程
  8、信号处理信息
  9、文件信息:可以进行读写操作的一些文件的信息
  10、页面管理信息
  11、优先级:相对于其他进程的优先级
  12、ptrace系统调用
  13、虚拟内存处理

struct task_struct {    volatile long state;  void *stack;    atomic_t usage;    unsigned int flags;  unsigned int ptrace;    int lock_depth;  #ifdef CONFIG_SMP #ifdef __ARCH_WANT_UNLOCKED_CTXSW  int oncpu; #endif #endif  int prio, static_prio, nORMal_prio;    unsigned int rt_priority;    const struct sched_class *sched_class;    struct sched_entity se;    struct sched_rt_entity rt; #ifdef CONFIG_PREEMPT_NOTIFIERS  struct hlist_head preempt_notifiers; #endif  unsigned char fpu_counter; #ifdef CONFIG_BLK_DEV_IO_TRACE  unsigned int btrace_seq; #endif  unsigned int policy;    cpumask_t cpus_allowed; #ifdef CONFIG_TREE_PREEMPT_RCU  int rcu_read_lock_nesting;    char rcu_read_unlock_special;    struct rcu_node *rcu_blocked_node;    struct list_head rcu_node_entry; #endif  #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)  struct sched_info sched_info; #endif  struct list_head tasks;    struct plist_node pushable_tasks;    struct mm_struct *mm, *active_mm;  int exit_state;    int exit_code, exit_signal;    int pdeath_signal;  unsigned int personality;    unsigned did_exec:1;    unsigned in_execve:1;    unsigned in_iowait:1;  unsigned sched_reset_on_fork:1;    pid_t pid;    pid_t tgid; #ifdef CONFIG_CC_STACKPROTECTOR  unsigned long stack_canary; #endif  struct task_struct *real_parent;  struct task_struct *parent;      struct list_head children;  struct list_head sibling;  struct task_struct *group_leader;        struct list_head ptraced;    struct list_head ptrace_entry;  struct bts_context *bts;  struct pid_link pids[PIDTYPE_MAX];    struct list_head thread_group;    struct completion *vfork_done;       int __user *set_child_tid;       int __user *clear_child_tid;         cputime_t utime, stime, utimescaled, stimescaled;    cputime_t gtime;    cputime_t prev_utime, prev_stime;    unsigned long nvcsw, nivcsw;  struct timespec start_time;  struct timespec real_start_time;  unsigned long min_flt, maj_flt;    struct task_cputime cputime_expires;    struct list_head cpu_timers[3];  const struct cred *real_cred;    const struct cred *cred;     struct mutex cred_guard_mutex;  struct cred *replacement_session_keyring;  char comm[TASK_COMM_LEN];  int link_count, total_link_count; #ifdef CONFIG_SYSVIPC  struct sysv_sem sysvsem; #endif #ifdef CONFIG_DETECT_HUNG_TASK  unsigned long last_switch_count; #endif  struct thread_struct thread;  struct fs_struct *fs;  struct files_struct *files;  struct nsproxy *nsproxy;  struct signal_struct *signal;    struct sighand_struct *sighand;    sigset_t blocked, real_blocked;    sigset_t saved_sigmask;  struct sigpending pending;    unsigned long sas_ss_sp;    size_t sas_ss_size;    int (*notifier)(void *priv);    void *notifier_data;    sigset_t *notifier_mask;    struct audit_context *audit_context; #ifdef CONFIG_AUDITSYSCALL  uid_t loginuid;    unsigned int sessionid; #endif  seccomp_t seccomp;  u32 parent_exec_id;    u32 self_exec_id;  spinlock_t alloc_lock; #ifdef CONFIG_GENERIC_HARDIRQS  struct irqaction *irqaction; #endif  spinlock_t pi_lock; #ifdef CONFIG_RT_MUTEXES  struct plist_head pi_waiters;  struct rt_mutex_waiter *pi_blocked_on; #endif #ifdef CONFIG_DEBUG_MUTEXES  struct mutex_waiter *blocked_on; #endif #ifdef CONFIG_TRACE_IRQFLAGS  unsigned int irq_events;    int hardirqs_enabled;    unsigned long hardirq_enable_ip;    unsigned int hardirq_enable_event;    unsigned long hardirq_disable_ip;    unsigned int hardirq_disable_event;    int softirqs_enabled;    unsigned long softirq_disable_ip;    unsigned int softirq_disable_event;    unsigned long softirq_enable_ip;    unsigned int softirq_enable_event;    int hardirq_context;    int softirq_context; #endif #ifdef CONFIG_LOCKDEP # define MAX_LOCK_DEPTH 48UL  u64 curr_chain_key;    int lockdep_depth;    unsigned int lockdep_recursion;    struct held_lock held_locks[MAX_LOCK_DEPTH];    gfp_t lockdep_reclaim_gfp; #endif  void *journal_info;  struct bio *bio_list, **bio_tail;  struct reclaim_state *reclaim_state;    struct backing_dev_info *backing_dev_info;    struct io_context *io_context;    unsigned long ptrace_message;    siginfo_t *last_siginfo;  struct task_io_accounting ioac; #if defined(CONFIG_TASK_XACCT) u64 acct_rss_mem1;   u64 acct_vm_mem1;  cputime_t acct_timexpd;  #endif #ifdef CONFIG_CPUSETS nodemask_t mems_allowed;     int cpuset_mem_spread_rotor; #endif #ifdef CONFIG_CGROUPS  struct CSS_set *cgroups;  struct list_head cg_list; #endif #ifdef CONFIG_FUTEX struct robust_list_head __user *robust_list; #ifdef CONFIG_COMPAT struct compat_robust_list_head __user *compat_robust_list; #endif  struct list_head pi_state_list;    struct futex_pi_state *pi_state_cache; #endif #ifdef CONFIG_PERF_EVENTS struct perf_event_context *perf_event_ctxp;    struct mutex perf_event_mutex;    struct list_head perf_event_list; #endif #ifdef CONFIG_NUMA struct mempolicy *mempolicy;     short il_next; #endif atomic_t fs_excl;    struct rcu_head rcu;  struct pipe_inode_info *splice_pipe; #ifdef  CONFIG_TASK_DELAY_ACCT struct task_delay_info *delays; #endif #ifdef CONFIG_FAULT_INJECTION  int make_it_fail; #endif  struct prop_local_single dirties; #ifdef CONFIG_LATENCYTOP  int latency_record_count;    struct latency_record latency_record[LT_SAVECOUNT]; #endif  unsigned long timer_slack_ns;    unsigned long default_timer_slack_ns;    struct list_head *scm_work_list; #ifdef CONFIG_FUNCTION_GRAPH_TRACER  int curr_ret_stack;  struct ftrace_ret_stack *ret_stack;  unsigned long long ftrace_timestamp;  atomic_t trace_overrun;  atomic_t tracing_graph_pause; #endif #ifdef CONFIG_TRACING  unsigned long trace;  unsigned long trace_recursion; #endif   unsigned long stack_start;};

--结束END--

本文标题: Linux操作系统 进程之间的通信

本文链接: https://www.lsjlt.com/news/243785.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux操作系统 进程之间的通信
     进程之间的通信预备知识:用户态和内核态,当一个进程在执行用户自己的代码时处于用户运行态(用户态);当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态)。进程之间的通信(Inter Processs Communic...
    99+
    2023-06-05
  • Linux之进程间通信(共享内存【mmap实现+系统V】)
    目录共享内存mmap()及其相关的系统调用mmap()munmap()共享内存的使用命令管理共享内存总结共享内存 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,两个不同的进程A、B共享内存的意思就是:同一...
    99+
    2023-03-23
    Linux进程间通信 Linux共享内存 Linux进程
  • Linux进程间通信的方式
    这篇文章主要介绍“Linux进程间通信的方式”,在日常操作中,相信很多人在Linux进程间通信的方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux进程间通信的方式”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-16
  • Linux常见的进程间通信
    目录 管道pipe匿名管道接口介绍示例代码 fifo命名管道接口介绍代码示例匿名管道与命名管道的区别 shm共享内存接口介绍相关指令代码示例特点总结 信号信号量socket...
    99+
    2023-09-05
    linux 服务器 运维
  • Linux系统进程间的通信方式和原理是什么
    这篇文章给大家介绍Linux系统进程间的通信方式和原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。进程的概念进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资...
    99+
    2023-06-28
  • 通过操作系统进程找到top sql信息
    SELECT 'USERNAME :' || s.username || chr(10) || 'SCHEMA:'&n...
    99+
    2022-10-18
  • 通过Python脚本理解系统进程间通信
    from socket import *  #导入socket包中的所有内容from time import ctime #导入time包,同时在本地可使用ctime进行调用import os,sys #导入os,sys包HOST='loc...
    99+
    2023-01-31
    脚本 进程 通信
  • Linux 进程通信之FIFO的实现
    FIFO通信(first in first out) FIFO 有名管道,实现无血缘关系进程通信。 创建一个管道的伪文件 a.mkfifo testfifo 命令创建 b.也可以使用函数in...
    99+
    2022-06-04
    Linux FIFO Linux 进程通信
  • 【Linux】操作系统&&进程概念
    文章目录 1. 冯诺依曼体系结构2. 操作系统3. 进程进程的基本概念查看进程和杀死进程父进程和子进程通过系统调用创建子进程 1. 冯诺依曼体系结构 冯·诺依曼结构也称普林斯顿结构,...
    99+
    2023-08-31
    linux 网络 服务器
  • Java数组和Linux操作系统之间的联系是什么?
    Java是一种广泛使用的编程语言,而Linux操作系统则是一种广泛使用的操作系统。虽然这两者看似没有太多联系,但实际上它们之间有着紧密的联系。其中最显著的联系之一就是Java数组在Linux操作系统中的应用。 Java数组是Java语言中...
    99+
    2023-10-03
    数组 linux django
  • 【Linux】操作系统与进程的概念
    目录 冯诺依曼体系 注意 为什么CPU不直接访问输入或输出设备? 跨主机间数据的传递 操作系统 管理 进程 描述进程 进程的查看和终止  bash 通过系统调用创建子进程 fork的辨析 冯诺依曼体系 🥖冯·诺依曼结...
    99+
    2023-08-31
    linux 运维 服务器
  • Linux进程间的通信方式有哪些
    本篇内容主要讲解“Linux进程间的通信方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux进程间的通信方式有哪些”吧!进程的概念进程是操作系统的概念,每当我们执行一个程序时,对于...
    99+
    2023-06-16
  • Linux进程间通信的方式有哪些
    本文小编为大家详细介绍“Linux进程间通信的方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux进程间通信的方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.管道管道分为有名管道和无名...
    99+
    2023-06-28
  • Linux进程间通信的方式是什么
    本篇内容主要讲解“Linux进程间通信的方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux进程间通信的方式是什么”吧!·进程间通信:操作系统为系统提供的用于实现进程间通信的方式进...
    99+
    2023-06-29
  • Linux系统中进程通信方式有哪些
    小编给大家分享一下Linux系统中进程通信方式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.管道管道分为有名管道和无名管道无名管道是一种半双工的通信方式...
    99+
    2023-06-28
  • Android IPC进程间通信详解最新AndroidStudio的AIDL操作)
    前言 前面梳理了Android的线程间的通信《Thread、Handler和HandlerThread关系何在?》 ,这些都是在同一个进程中,那进程间的通信,或者说不同的应用...
    99+
    2022-06-06
    aidl ipc androidstudio 通信 Android
  • Linux系统进程通信的主要方式是什么
    Linux系统进程通信的主要方式是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。概览进程间通信常见方式如下:管道FIFO消息队列信号量共享内存UNXI域套接...
    99+
    2023-06-28
  • python之操作系统介绍,进程的创建
    操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系...
    99+
    2023-01-30
    进程 操作系统 python
  • linux进程间的通信方式有哪几种
    这篇文章主要介绍“linux进程间的通信方式有哪几种”,在日常操作中,相信很多人在linux进程间的通信方式有哪几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux进程间的通信方式有哪几种”的疑惑有所...
    99+
    2023-06-20
  • Linux进程间socketpair通信被阻塞的问题
    在Linux系统中,使用socketpair函数创建的套接字对可以用于进程间通信。但是,在进行通信时可能会遇到阻塞的问题。一种常见的...
    99+
    2023-09-08
    Linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作