当前位置: 首页 > news >正文

syscall()

1、syscall的定义

#include<unistd.h>
#include<sys/syscall.h>		/ For SYS_xxx definitions /

long syscall(long number, ...);

syscall执行间接系统调用,使用该函数会执行一个系统调用,根据指定的参数 number 和所有系统调用的汇编语言接口来确定调用哪个系统调用。

系统调用所使用的符号常量可以在头文件 <sys/syscall.h> 里面找到。

2、syscall(SYS_gettid)

该函数用于获取线程的真实线程id。

Linux中,每个进程有一个 pid,类型pid_t,由getpid()取得。Linux下的POSIX线程也有一个 id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,数据段等。

有时候我们可能需要知道线程的真实pid。比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为 tid

有一个函数gettid()可以得到tid,但glibc并没有实现该函数,只能通过Linux的系统调用syscall来获取。

3、syscall(SYS_tgkill, getpid(), tid, SIGHUP)

目前还未知其用法,挖个坑。

4、上述两个函数的测试代码

#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
     pid_t tid;

     tid = syscall(SYS_gettid);
     printf("tid : %d\n",tid);

     tid = syscall(SYS_tgkill, getpid(), tid, SIGHUP);
     printf("tid : %d ...\n",tid);
}

输出结果:
在这里插入图片描述

相关文章:

  • 记一个编写宏时的错误
  • C++中全局变量,静态变量,静态局部变量 的初始化和内存分配问题
  • C++ 模板实现单例模式
  • 《C++ Primer》 异常
  • C++父类和子类指针的相互赋值和转换
  • 算法设计与分析————期末死亡冲刺
  • 现代软件工程————期末死亡冲刺
  • std::string::npos 常量解析
  • 练习4-3 求给定精度的简单交错序列部分和 (15 分)本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
  • 浙大版《C语言程序设计(第4版)》题目集 练习4-6 猜数字游戏 (15 分)
  • 练习4-7 求e的近似值 (15 分)自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
  • 数组输入输出的方法
  • 习题:贴邮票
  • 习题:遍历搜寻
  • 习题:哥德巴赫猜想
  • 《剑指offer》分解让复杂问题更简单
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Codepen 每日精选(2018-3-25)
  • Golang-长连接-状态推送
  • LeetCode29.两数相除 JavaScript
  • MQ框架的比较
  • Mysql5.6主从复制
  • React-生命周期杂记
  • ucore操作系统实验笔记 - 重新理解中断
  • VuePress 静态网站生成
  • Web Storage相关
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 将 Measurements 和 Units 应用到物理学
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 那些年我们用过的显示性能指标
  • 前端性能优化--懒加载和预加载
  • 一、python与pycharm的安装
  • 因为阿里,他们成了“杭漂”
  • linux 淘宝开源监控工具tsar
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #WEB前端(HTML属性)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (十八)SpringBoot之发送QQ邮件
  • (转)Unity3DUnity3D在android下调试
  • (转)视频码率,帧率和分辨率的联系与区别
  • *1 计算机基础和操作系统基础及几大协议
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net core 6.0 升8.0
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET NPOI导出Excel详解
  • .net 反编译_.net反编译的相关问题
  • @Autowired 与@Resource的区别
  • @RequestMapping-占位符映射
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [20161214]如何确定dbid.txt
  • [ABC294Ex] K-Coloring
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [C++]打开新世界的大门之C++入门
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大