精华内容
下载资源
问答
  • 68-会话(创建会话

    千次阅读 2017-02-24 11:19:40
    在掌握会话的相关概念后,本篇完成一个创建会话的实例。1. 目标创建一个新会话,该会话中只有一个进程,就是创建该会话的进程。2. 思路创建会话的一个必要条件就是创建会话的进程不能是进程组组长。 这样做的理由是...

    在掌握会话的相关概念后,本篇完成一个创建会话的实例。

    1. 目标

    创建一个新会话,该会话中只有一个进程,就是创建该会话的进程。

    2. 思路

    创建会话的一个必要条件就是创建会话的进程不能是进程组组长。

    这样做的理由是:假设该进程是进程组组长,创建完该会话后,该进程成为了其它会话中的 session leader。然而,其组员(如果存在的话)仍然存在于原来的会话中,这将导致同一个进程组中的进程处在不同会话中,显然这是不允许的。

    直接在 bash 中执行进程,默认情况下,bash 会将该进程设置为进程组组长。

    所以为了防止进程是进程组组长,有两种做法:一、将你的进程加入到当前会话中的其它组中;二、让你的进程 fork 出一个子进程,再 kill 掉父进程(不 kill 也没关系)。

    第一种做法通常不太适合,因为你并不知道当前会话中有哪些组;其次,你怎么能随便把你的进程加到其它不相干的组呢?

    所以这里就只有第二种做法了。

    3. 程序清单

    • 代码
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
      pid_t sid, pid;
      pid = fork();
      if (pid == 0) {
        // 子进程不可能是进程组组长,可以让其创建新的会话,
        // 同时它成为 session leader, group leader
    
        // 先查看子进程从属于哪个会话
        sid = getsid(getpid());
        printf("sid = %d\n", sid);
    
        // 让子进程创建新会话
        sid = setsid();
        if (sid < 0) {
          perror("setsid");
        }   
        // 查看子进程当前从属于哪个会话
        printf("sid = %d\n", sid);
      }
    
      while(1) sleep(1);
      return 0;
    }

    注意,上面的程序并没有 kill 掉父进程,这不是必须的。但是通常会 kill 掉,因为父进程已经没什么用了,除非你另作它用。

    • 编译和运行
    $ gcc session.c -o session
    $ ./session
    • 运行结果


    这里写图片描述
    图1 session 进程运行的结果

    通过使用命令 ps ajx | sed -n '1p;/\/session$/p;/bash/p;/ps ajx/p' 可以查看当前相关的会话。


    这里写图片描述
    图2 通过命令查看会话

    图 2 中一共显示了 3 个会话,分别是 2874、2294、2925.

    我们理一下这些会话之间的关系:

    |- session 2874
        |- group 2874
            |- process 2874 [./session](session leader, group leader)
    |- session 2294
        |- group 2294
            |- process 2294 [-bash](session leader, group leader)
        |- group 2873
            |- process 2873 [./session](group leader)
    |- session 2925
        |- group 2925
            |- process 2925 [-bash](session leader, group leader)
        |- group 3414
            |- process 3414 [ps ajx](group leader)
            |- process 3415 [sed -n ...]

    从上面的树型图可以很清晰的理清各个会话、进程组以及进程间的关系。

    进程 2874 就是我们 fork 出来的子进程,它创建了一个新的会话 2874,同时任该会话的 session leader,同时也是进程组的组长。注意到进程 2874 已经脱离的终端了,在图 2 中的 TTY 一栏显示的是一个问号。

    在会话 2294 中,进程 2294 是 session leader,也就是 bash 进程,我们执行 ./sesion 程序时,就是在这个 bash 中。其中,父进程 2873 仍然还在该会话中。

    会话 2925 的 session leader 是 bash 2925 进程,也就是是我们执行命令ps ajx | sed -n '1p;/\/session$/p;/bash/p;/ps ajx/p'的那个地方,该会话中有两个进程组,其中一个进程组就只有 bash 进程组自己,另一个进程组,就是我们执行的命令,该进程组中有两个进程,分别是 ps 和 sed,而 ps 是该进程组的组长。

    4. 总结

    • 理解会话
    • 掌握创建会话的方法
    • 理解进程组组长为什么不能创建新会话

    练习1:完成本文中的实验,分析进程间关系。
    练习2:直接关闭掉执行 ./sesion 程序的终端,再使用 ps 命令查看结果。

    展开全文
  • 行业分类-电子电器-会话创建方法及相关设备.zip
  • 创建会话工厂part4of4

    2010-05-16 23:41:30
    创建会话工厂 创建会话工厂 创建会话工厂
  • 创建会话工厂part3of4

    2010-05-16 23:37:58
    创建会话工厂 创建会话工厂 创建会话工厂
  • 创建会话工厂part2of4

    2010-05-16 23:31:28
    创建会话工厂 创建会话工厂 创建会话工厂
  • 如何创建会话工厂 如何创建会话工厂 如何创建会话工厂
  • 行业分类-电子电器-会话创建方法及相关设备[1].zip
  • 然后我们开始创建会话,tensorflow一般情况下创建了绘画才可以进行正常的计算。 #矩阵乘法,先做乘法,再创建会话 product = tf.matmul(m1,m2)#我们把两个矩阵进行相乘 print(product) 创建会话的方式1: ...
    import tensorflow as tf
    #定义一个常量
    m1=tf.constant([[3,3]])#这是一个一行两列的数据
    print(m1)
    m2=tf.constant([[2],[3]])
    print(m2)

    输出:

    Tensor("Const_5:0", shape=(1, 2), dtype=int32)
    Tensor("Const_6:0", shape=(2, 1), dtype=int32)

    从这个结果当中我们可以看到我们的tensorflow之前是定义了一个一行两列的矩阵,之后是定义了一个两行一列的矩阵,因此第一个显示的shape为(1,2),第二个显示的shape为(2,1)就是这么来的。然后我们开始创建会话,tensorflow一般情况下创建了绘画才可以进行正常的计算。

    #矩阵乘法,先做乘法,再创建会话
    product=tf.matmul(m1,m2)#我们把两个矩阵进行相乘
    print(product)

    创建会话的方式1:

    sess=tf.Session()#定义一个会话
    result=sess.run(product)
    print(result)
    sess.close()

    输出:
    [[15]]

    从这种方法当中可以看到我们创近了一个会话是必须将这个会话进行关闭的,下面还有一种方法创建了会话可以不用关闭吗,然后这种方法也会得到我们两个矩阵相乘的准确结果:15

    with tf.Session() as sess:
        result=sess.run(product)
    print(result)#利用这种方式创建会话就不需要关闭我们的session了

    输出:
    [[15]]

    这些就是tensorflow的基本内容了。

    展开全文
  • 企业微信调用创建会话接口 用他的自检程序 wx.checkJsApi 检测 openEnterpriseChat 创建会话接口 ios 返回 false 不可用 android 返回true 可用 但是用android 手机去试 依然唤不起 会话接口 求指教 -- 所有配置文件...
  • Zookeeper客户端API之创建会话(六)

    千次阅读 2017-03-10 08:58:47
    Zookeeper对外提供了一套...本篇博客主要讲一下创建会话。创建项目首选,创建一个基于maven管理的简单java工程。在pom文件中引入zookeeper。 <groupId>org.apache.zookeeper <artifactId>zookeeper <version>3.4.

    Zookeeper对外提供了一套Java的客户端API。本篇博客主要讲一下创建会话。

    创建项目

    首选,创建一个基于maven管理的简单java工程。在pom文件中引入zookeeper。

    <dependency>
       <groupId>org.apache.zookeeper</groupId>
       <artifactId>zookeeper</artifactId>
       <version>3.4.9</version>
    </dependency>

    编写测试类

    首选以最简单的API为例。

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

    其中,connectString表示要连接的zookeeper服务器地址列表,格式为:192.168.0.1:2181。支持多个地址拼接,中间用逗号分隔。其中地址后面还可以拼接上zookeeper的操作路径,比如:192.168.0.1:2181/zk/test。

    sessionTimeout:会话超时时间,单位“毫秒”。通过心跳来监测会话的有效性。

    watcher:监听节点的状态变化,如果发生变化则通知此watcher,做出相应处理。如果不需要监听,则可设置为null。

    测试代码:

    package com.secbro.learn;
    
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    
    import java.io.IOException;
    import java.util.Date;
    import java.util.concurrent.CountDownLatch;
    
    /**
     * Created by zhuzs on 2017/3/9.
     */
    public class TestSession implements Watcher{
    
        private static CountDownLatch countDownLatch = new CountDownLatch(1);
        public static void main(String[] args) throws IOException {
            Long startTime = new Date().getTime();
            ZooKeeper zooKeeper = new ZooKeeper("192.168.0.1:2181",5000,new TestSession());
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("创建连接花费时间:" + (new Date().getTime() - startTime) + "ms");
            System.out.println("连接状态:" + zooKeeper.getState());
        }
    
        public void process(WatchedEvent event) {
            System.out.println("Receive watcher event:" + event);
            if(Event.KeeperState.SyncConnected == event.getState()){
                countDownLatch.countDown();
            }
        }
    }
    

    由于Zookeeper客户端和服务器创建会话是异步过程,因此使用CountDownLatch来阻塞线程,等待服务器创建完成,并发送事件通知。

    打印结果为:

    Receive watcher event:WatchedEvent state:SyncConnected type:None path:null
    创建连接花费时间:9155ms
    连接状态:CONNECTED

    其他接口

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,
                boolean canBeReadOnly)

    此方法多了一个canBeReadOnly参数,此参数表示当前会话是否支持“只读”模式。

    public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,
                long sessionId, byte[] sessionPasswd)

    此方法允许传入sessionId和sessionPasswd,目的是为了重复使用会话。通过以下方法获得:

    zooKeeper.getSessionId();
    zooKeeper.getSessionPasswd()

    然后作为参数创建新的连接。当sessionId和sessionPasswd不正确时,服务器会返回Expired事件。

    展开全文
  • 在进行ajax请求的时候,发现并没有进入的后台方法里,而是输出 invalidation sessions... Finished invalidation session. No sessions were stopped. 在打开页面的时候,会自动创建一个cookie为JESSONID ...
  • 会话 (Session) ...创建会话方式一 import tensorflow as tf #定义节点node1 node1=tf.constant([1,2,3]) #创建会话 sess=tf.Session() #调用sess.run()计算张量的值 try: print(sess.run(node1)...

    会话 (Session)

    TF中Session拥有并且控制TF程序运行时所有的资源;在计算完成后应当关闭会话回收资源

    创建会话方式一

    import tensorflow as tf
    #定义节点node1
    node1=tf.constant([1,2,3])
    #创建会话
    sess=tf.Session()
    #调用sess.run()计算张量的值
    try:
    	print(sess.run(node1)
    except:
    	print('exception!')
    finally:
    #关闭会话,回收资源
    	sess.close()
    

    创建会话方式二

    import tensorflow as tf
    #定义node节点
    node1 = tf.constant(3.0,tf.float32,name='node1')
    node2 = tf.constant(4.0,tf.float32,name='node2')
    node3 = tf.add(node1,node2,name='node3')
    #使用上下文管理器自动关闭会话,回收资源
    with tf.Session() as sess:
    	pirnt(sess.run(node3))
    

    或者

    import tensorflow as tf
    #定义node节点
    node1 = tf.constant(3.0,tf.float32,name='node1')
    node2 = tf.constant(4.0,tf.float32,name='node2')
    node3 = tf.add(node1,node2,name='node3')
    
    sess = tf.Session() 
    with sess.as_default():
    	print(node3.eval())
    #或者如下表示方式替换with后语句
    print(sess.run(node3))
    print(node3.eval(session=sess))
    

    创建会话方式三

    import tensorflow as tf
    #定义node节点
    node1 = tf.constant(3.0,tf.float32,name='node1')
    node2 = tf.constant(4.0,tf.float32,name='node2')
    node3 = tf.add(node1,node2,name='node3')
    
    sess = tf.InteractivSession()
    print(result.eval())
    sess.close()
    

    **以上内容来源:**浙江大学城市学院《深度学习应用开发TensorFlow实践》

    展开全文
  • secureCRT批量创建会话标签

    千次阅读 2019-03-20 09:35:00
    因工作需要,需要大量登录设备,就写个这脚本和大家分享一下心得. # $language="python" # $interface="1.0" user='root' passwd='xxxooo' ...同目录下创建你要访问的IP文件.TXT,然后在CRT运行即可.
  • 今天帮客户配置服务器的时候运行phpmyadmin出现了“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。”的错误,经排查原来是权限问题,大家可以参考下面的方法解决
  • oracle创建会话级别的临时表

    千次阅读 2013-08-21 18:41:36
    create global temporary table myTable on commit preserve rows ...原因: 创建临时表时,如果指定on commit preserve rows,则是会话级别临时表,也就是说会话结束后,临时表中的记录会清空. 如果不指定,则默认为o
  • 使用终端模拟器Xshell 5 时,我们需要在桌面上创建一个会话的快捷方式,以达到快速打开会话,连接服务器的目的。那么,如何创建一个快捷方式会话?如果不知道怎么操作,下面就一起来学习具体操作技巧。 Xshell 5...
  • Curator之Maven依赖、创建会话

    千次阅读 2017-12-12 11:33:45
    使用Fluent风格的API接口来创建会话  Curator提供的API接口在设计上最大的亮点在于其遵循了Fluent设计风格,这也是和ZooKeeper原生API以及ZkClient客户端有很大不同的地方。 // 使用Fluent风格的API接口来...
  • ZkClient之Maven依赖和创建会话

    千次阅读 2017-12-11 16:44:23
    ZkClient在ZooKeeper原生API接口之上进行了包装,是一个更易用的ZooKeeper客户端。同时,ZkClient在内部实现了诸如Session超时重连、Watcher反复注册等... 上面这个示例程序展示了如何使用ZkClient来创建会话
  • Xshell创建会话 首先要新建一个会话,输入名称和主机IP,点击连接即可。 连接会话,记住用户名和密码 输入用户名(勾选记住用户名和记住密码,则下次连接会话就不再需要输入用户名和密码,直接登录记住的用户) ...
  • http://cx-oracle.readthedocs.io/en/latest/module.html#cx_Oracle.SessionPool按照官网的思路比较好:使用cx_Oracle.SessionPool 返回一个会话池对象,这个对象调用 acquir...
  • 会话、保存会话方法之Cookie、简单的Cookie应用 会话 什么是会话?  在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。 会话可简单理解为:用户开一个浏览器,点击多个超链接,...
  • 通过已经创建好的会话文件,批量生成新的会话文件。 需要ssh账号密码一致的情况 1、找到xshell回话存放路径 (工具 -- 选项 -- 常规) 2、打开 会话文件夹路径 (和会话管理器里面的目录是对应的) ...
  • Zookeeper-会话创建流程

    千次阅读 2016-07-15 22:40:45
    调用Zookeeper的构造方法来实例化一个Zookeeper,在初始化过程中,会创建一个客户端的Watcher管理器:ClientWatchManager。设置会话默认Watcher。如果在构造方法中传入一个Watcher对象,那么客户端会将这个对象作为...
  • 四种会话跟踪方法

    万次阅读 2016-05-09 09:11:00
    前段时间看到web中会话跟踪技术,经过收集并整理将学习结果记录在此。1.什么是会话 客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话 。 2.什么是会话跟踪 对同一个用户对服务器的连续...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 435,555
精华内容 174,222
关键字:

创建会话的方法