首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在os.fork()之后,pyscard不能连接到pcscd服务?

在调用os.fork()之后,会创建一个新的子进程,该子进程是父进程的一个副本。在这种情况下,pyscard库可能无法连接到pcscd服务的原因如下:

  1. 进程隔离:由于os.fork()创建的子进程是父进程的副本,子进程和父进程拥有独立的地址空间和资源,包括打开的文件描述符。pcscd服务可能是由父进程打开的文件描述符,当子进程尝试使用这些描述符时,可能会发生连接错误。
  2. 进程间通信:pcscd服务通常通过系统级的进程间通信机制(如Unix域套接字或消息队列)与客户端进行通信。当子进程创建时,它可能无法访问父进程建立的通信通道,从而导致pyscard无法连接到pcscd服务。

为了解决这个问题,可以考虑以下几个方案:

  1. 重新连接pcscd服务:在子进程中,可以尝试重新连接pcscd服务,以确保与该服务的连接。可以使用pyscard库提供的重新连接机制或自定义代码来实现。
  2. 使用进程间通信:在父进程中,可以通过进程间通信机制(如共享内存或消息队列)与pcscd服务进行通信。然后,子进程可以通过继承或重新连接这些通信通道来访问pcscd服务。
  3. 分离pcscd服务:可以在父进程创建子进程之前,将pcscd服务分离为一个独立的进程。然后,子进程可以通过与这个独立进程进行通信来访问pcscd服务。这种方式可以使用系统工具(如systemd)或编写自定义代码来实现。

需要注意的是,以上方案只是一些可能的解决方法,具体的实施方式取决于具体的应用场景和系统环境。对于更详细的实施建议,建议参考pyscard文档或向相关社区或论坛寻求帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一步步教你制作移动式银行卡信息读取器

背景:半年前,我从网上看到一个视频,讲的大概是一个人站在了一个人的旁边,待了几秒,然后就知道了那个人的银行卡信息了,而且不仅是银行卡信息,甚至持卡人的姓名,身份证号都有。我看完之后,当时就惊呆了。...我们写代码前大致是要先找到NFC读卡器说明文档和银行卡相关规范,了解其工作过程。...NFC读卡器发送请求数据给银行卡,然后银行卡响应数据,发送和响应的这些数据都是十六进制表示的,银行卡规范中均有详细说明。知道了命令之后,就是测试。...库: sudo apt-get install pcscd git python3-setuptools swig gcc libpcsclite-dev python3-dev sudo echo "...程序及资料: NFC资料代码 后记:其实上面的演示,你只要有个NFC读卡器就行,这个是最重要的,然后我的python程序是window10上写的,之后放到了树莓派中。

3.5K10
  • python fork()多进程

    相比之下,Python的os.fork()是唯一返回两次的函数,任何返回两次的函数,某种意义上,都可以调用os.fork()来实现。调用fork()之后,就同时存在两个正在运行程序的拷贝。...子进程终止后,必须调用wait()函数,否则系统系统资源会被大量的zombie进程消耗掉,最终会使服务器不可用。 操作系统可以非常容易地完成这个工作。...三、fork()性能 由于fork()函数每次客户端连接的时候必须在整个服务器中拷贝,所以或许有人会认为它是一个很慢的方法。事实上,fork()的性能对于几乎所有具有高负载的系统来说是可忽略的。...子进程会在fork()之后立刻终止,父进程sleep,能看出子进程出现了zombie,可以从第三列中的Z和输出最后的看出来。一旦父进程终止了,将可以确定两个进程都不存在了。...如果系统不能执行fork,os.fork()函数可以产生异常。为了防止服务器当机,必须处理这个异常。

    2.1K20

    python守护进程

    假如写一段服务端程序,如果ctrl+c退出或者关闭终端,那么服务端程序就会退出,于是就想着让这个程序成为守护进程,像httpd一样,一直在后端运行,不会受终端影响。...bin/env python #coding=utf8 def createDaemon(): import os, sys, time #产生子进程,而后父进程退出 try: pid = os.fork..."/") #创建新的会话,子进程成为会话的首进程 os.setsid() #修改工作目录的umask os.umask(0)   #创建孙子进程,而后子进程退出 try: pid = os.fork...time.ctime()) fd.flush() fd.close() if __name__=='__main__': createDaemon() fork子进程,父进程退出 通常,我们执行服务端程序的时候都会通过终端连接到服务器...2.修改子进程的工作目录 子进程创建的时候会继承父进程的工作目录,如果执行的程序是U盘里面,就会导致U盘不能卸载。

    1K20

    python 守护进程(daemon)

    stdout='/dev/null', stderr='/dev/null'):     # 重定向标准文件描述符(默认情况下定向到/dev/null)       try:         pid = os.fork...()         # 父进程(会话组头领进程)退出,这意味着一个非会话组头领进程永远不能重新获得控制终端。           ...# 执行第二次fork       try:         pid = os.fork()         if pid > 0:             sys.exit(0)  # 第二个父进程退出...1、fork子进程,父进程退出 通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端盒shell都是进程,shell进程是终端进程的子进程,通过ps命令可以很容易的查看到...2.修改子进程的工作目录 子进程创建的时候会继承父进程的工作目录,如果执行的程序是U盘里面,就会导致U盘不能卸载。

    1.1K30

    Python守护进程daemon实现

    而对于init进程,它是一个由内核引导装入时启动的用户层次的命令,属于用户级守护进程,主要负责启动各运行层次特定系统服务。这些服务通常是它们自己拥有的守护进程的帮助下实现的。...7、忽略SIGCHLD信号    这一步并非必须的,只对需要创建子进程的守护进程才有必要,很多服务器守护进程设计成通过派生子进程来处理客户端的请求,如果父进程不对SIGCHLD信号进行处理的话,子进程终止后变成僵尸进程...============' #调用daemon_init函数前是可以使用print到标准输出的,调用之后就要用把提示信息通过stdout发送到日志系统中了 daemon_init('/dev/...() #父进程(会话组头领进程)退出,这意味着一个非会话组头领进程永远不能重新获得控制终端。...python的输出有缓冲,导致ser_log.out并不能够马上看到输出。

    7.5K30

    小说python中的孤儿进程

    然而,实际应用中,孤儿进程虽然不会给系统造成直接性的危害,但更多时候会对业务造成一些影响,如当子进程为一个基于tcp的socket服务时,会造成主进程再次启动时无法启动,端口被占用。...对于一些有进程监控的服务来说,可能会造成业务主服务无法重启,或是进程不可控。 鉴于这些情况下,很多时候是不希望产生孤儿进程的,子进程应随父进程结束而结束。...为什么 豆瓣工程师给出了解决办法,不能只拿来用用,得问几个为什么?通过什么实现的?为什么要这么做呢? 下面具体分析下实现方法: 1....() if pid == 0: # child process os.setpgrp() pid = os.fork() if pid...子进程exit_when_parent_or_child_dies方法中循环等待父进程状态,当PPID为1时,说明父进程已退出,通过killpg()将进程组中的所有进程(孙孙进程)杀死,然后自己退出。

    1.7K10

    2.并发编程~先导篇(下)

    为什么要realase发布而不用debug直接部署?这背后的性能相差几何?...小潘同学最爱打扫 postion_index:25 postion_index:0 其他方法可以参考:这篇文章(Python3很多都和Python2不太相同,辩证去看吧) 注意一点: 通过MMap内存映射之后...、忽略和阻塞的(这个是系统预留的,如果预留都没有可以想象肯定木马横向) PS:信号的优先级一般都是比较高的,往往进程收到信号后都会停下手上的事情先处理信号(死循环也一样歇菜) 来看一个例子:(处理singint...我这边只是一台老电脑,要是真服务器下性能相差可能让你吓一跳 现在知道为什么要realase发布而不用debug直接部署了吧(线上项目非必要情况,一般都会删除所有日记输出的) 定时器setitimer(...sys.stdout.fileno()) with open("err.log", "a+") as f: os.dup2(f.fileno(), sys.stderr.fileno()) 之后

    1.3K40

    Python 多进程

    我们知道进程是python中最小的资源分配单元,也就是进程中间的数据,内存是不共享的,每启动一个进程,都要独立分配资源和拷贝访问的数据,所以进程的启动和销毁的代价是比较大了,所以实际中使用多进程,要根据服务器的配置来设定...,这是多进程使用中与多线程最明显的区别。...结束测试 对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后不能继续添加新的Process了。...适用系统:unix forkserver 当程序启动并选择forkserver的启动方法时,将启动服务器进程。...从那时起,每当需要一个新进程时,父进程就会连接到服务器,并请求它fork一个新进程。 fork server进程是单线程的,所以使用os.fork()是安全的。

    36541

    Python实现守护进程 转

    他们常常在系统引导装入时启动,系统关闭时终止。unix系统有很多守护进程,大多数服务器都是用守护进程实现的,例如inetd守护进程。...创建子-孙进程,使sid不等pid 关闭打开的文件描述符 通常就关闭STDIN、STDOUT和STDERR 改变当前工作目录 防止占用别的路径的working dir的fd,导致一些block不能...第一次fork,setsid之后,子进程成为session leader,进程可以打开终端;第二次fork产生的进程,不再是session leader,进程则无法打开终端。...') # First fork (detaches from parent) try: if os.fork() > 0:...也可以使用 Supervisor 管理进程,具体可看 Supervisor安装与配置 参考 tzuryby/daemon.py python2实现的通用的python daemon类 12.14 Unix

    1.2K20

    PowerJob 的自实现高可用方案,妙妙妙!

    首先,为什么不用注册中心呢? 要做到分布式环境下的高可用,肯定是需要服务注册、服务发现这样的概念的。没有外部注册中心,说白了就是自己去实现了一套类似的机制。那为什么要怎么做呢?...server 既然需要持有某一个分组下完整的集群信息,那么可以顺其自然的想到,能不能让某一个分组的所有 worker 都连接到某一台 server 呢?...重?这一串词汇,把我拉回了刚刚设计的方案之中,然后给我当头一棒。...就像前面说的那样,worker 因为没办法获取 server 的准确状态,所以不能由 worker 来决定连接哪一台 server。因此,worker 需要做的,只是服务发现。...我们的目标是某个分组下所有的 worker 都连接到同一台 server,因此,即便产生那种误打误撞篡位的情况,服务发现机制的加持下,整个集群最终还是会连接到同一台 server,完美实现我们的需求。

    2K30

    面试官邪魅一笑:你猜一个 TCP 连接能发多少 HTTP 请求 ?

    一道经典的面试题是从 URL 浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。...为什么有的时候刷新页面不需要重新建立 SSL 连接? 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?...至于标准为什么这么设定,我们可以大概推测一个原因:由于 HTTP/1.1 是个文本协议,同时返回的内容也并不能区分对应于哪个发送的请求,所以顺序必须维持一致。...主要有下面两点: 维持和服务器已经建立的 TCP 连接,同一接上顺序处理多个请求。 和服务器建立多个 TCP 连接。 第四个问题:为什么有的时候刷新页面不需要重新建立 SSL 连接?...如果图片都是 HTTPS 连接并且同一个域名下,那么浏览器 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。

    79430

    面试官问:一个 TCP 连接可以发多少个 HTTP 请求?我懵了!

    一道经典的面试题是从 URL 浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。...4、为什么有的时候刷新页面不需要重新建立 SSL 连接? 5、浏览器对同一 Host 建立 TCP 连接到数量有没有限制?...至于标准为什么这么设定,我们可以大概推测一个原因:由于 HTTP/1.1 是个文本协议,同时返回的内容也并不能区分对应于哪个发送的请求,所以顺序必须维持一致。...主要有下面两点: 1、维持和服务器已经建立的 TCP 连接,同一接上顺序处理多个请求。 2、和服务器建立多个 TCP 连接。 第四个问题: 为什么有的时候刷新页面不需要重新建立 SSL 连接?...如果图片都是 HTTPS 连接并且同一个域名下,那么浏览器 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。

    53820

    面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

    为什么有的时候刷新页面不需要重新建立 SSL 连接? 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?...至于标准为什么这么设定,我们可以大概推测一个原因:由于 HTTP/1.1 是个文本协议,同时返回的内容也并不能区分对应于哪个发送的请求,所以顺序必须维持一致。...Head-of-line Blocking 连接头阻塞:在建立起一个 TCP 连接之后,假设客户端在这个连接连续向服务器发送了几个请求。...主要有下面两点: 维持和服务器已经建立的 TCP 连接,同一接上顺序处理多个请求。 和服务器建立多个 TCP 连接。 第四个问题 为什么有的时候刷新页面不需要重新建立 SSL 连接?...如果图片都是 HTTPS 连接并且同一个域名下,那么浏览器 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。

    37610

    面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

    为什么有的时候刷新页面不需要重新建立 SSL 连接? 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?...至于标准为什么这么设定,我们可以大概推测一个原因:由于 HTTP/1.1 是个文本协议,同时返回的内容也并不能区分对应于哪个发送的请求,所以顺序必须维持一致。...Head-of-line Blocking 连接头阻塞:在建立起一个 TCP 连接之后,假设客户端在这个连接连续向服务器发送了几个请求。...主要有下面两点: 维持和服务器已经建立的 TCP 连接,同一接上顺序处理多个请求。 和服务器建立多个 TCP 连接。 第四个问题 为什么有的时候刷新页面不需要重新建立 SSL 连接?...如果图片都是 HTTPS 连接并且同一个域名下,那么浏览器 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。

    76950

    面试官问:一个 TCP 连接可以发多少个 HTTP 请求?我懵了!

    为什么有的时候刷新页面不需要重新建立 SSL 连接? 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?...至于标准为什么这么设定,我们可以大概推测一个原因: 由于 HTTP/1.1 是个文本协议,同时返回的内容也并不能区分对应于哪个发送的请求,所以顺序必须维持一致。...Head-of-line Blocking 连接头阻塞:在建立起一个 TCP 连接之后,假设客户端在这个连接连续向服务器发送了几个请求,按照标准,服务器应该按照收到请求的顺序返回结果 假设服务处理首个请求时花费了大量时间...主要有下面两点: 维持和服务器已经建立的 TCP 连接,同一接上顺序处理多个请求。 和服务器建立多个 TCP 连接。 第四个问题 为什么有的时候刷新页面不需要重新建立 SSL 连接?...如果图片都是 HTTPS 连接并且同一个域名下,那么浏览器 SSL 握手之后会和服务器商量能不能用 HTTP2 如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。

    3.3K30

    面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

    为什么有的时候刷新页面不需要重新建立 SSL 连接? 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?...至于标准为什么这么设定,我们可以大概推测一个原因:由于 HTTP/1.1 是个文本协议,同时返回的内容也并不能区分对应于哪个发送的请求,所以顺序必须维持一致。...Head-of-line Blocking 连接头阻塞:在建立起一个 TCP 连接之后,假设客户端在这个连接连续向服务器发送了几个请求。...主要有下面两点: 维持和服务器已经建立的 TCP 连接,同一接上顺序处理多个请求。 和服务器建立多个 TCP 连接。 第四个问题 为什么有的时候刷新页面不需要重新建立 SSL 连接?...如果图片都是 HTTPS 连接并且同一个域名下,那么浏览器 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。

    49310
    领券