小编rua*_*hao的帖子

得到pid in shell(bash)

我有Bash的问题,我不知道为什么.
在shell下,我输入:

echo $$    ## print 2433
(echo $$)  ## also print 2433
(./getpid) ## print 2602
Run Code Online (Sandbox Code Playgroud)

"getpid"是一个获取当前pid的C程序,如:

   int main() {
    printf("%d", (int)getpid());
    return 0;
   }
Run Code Online (Sandbox Code Playgroud)

令我困惑的是:

  1. 我认为"(命令)"是一个子流程(我是对的吗?),我认为它的pid应该与它的父pid不同,但它们是相同的,为什么......
  2. 当我使用我的程序在括号之间显示pid时,它显示的pid是不同的,是不是?
  3. '$$'就像宏?

你能帮助我吗?

linux bash shell pid

143
推荐指数
4
解决办法
27万
查看次数

Emacs Lisp中setq和setq-default之间的区别

我有一个关于Emacs Lisp的问题.setqsetq-default有什么区别?我很困惑.

教程说setq本地缓冲区生效,而setq-default影响所有缓冲区.

例如,如果我在init.el中写了(setq a-var a-vars-value),我发现在启动Emacs并打开一个新缓冲区之后,a-var也在那里,它的值是a-vars-value.我以为不应该在那里.似乎setqsetq-default之间没有区别.

我的理解有问题吗?

非常感谢你.

例如:
1)我在init.el文件中写了(setq hello 123),我在shell中运行emacs abuffer,然后我输入"hello Cx Ce",它显示"123".当我在所有新缓冲区中运行它时,会发生同样的情况.

2)我在init.el文件中写了(setq tab-width 4).当我运行tab-width Cx Ce时,它显示"8"(当前模式为'Text').但是,当我使用(setq-default tab-width 4)时,它显示"4".我无法解释这种现象.

emacs elisp

79
推荐指数
1
解决办法
1万
查看次数

bash脚本中$ @和$*之间的差异

下面有4个bash片段.我打电话给他们./script.sh a b c

for arg in $@; do 
echo "$arg"
done   ## output "a\nb\nc"

for arg in "$@"; do
echo "$arg"
done  ## output "a\nb\nc" -- I don't know why

for arg in $*; do
echo "$arg"
done  ##    output "a\nb\nc"

for arg in "$*"; do
echo "$arg"
done    ## output "abc"
Run Code Online (Sandbox Code Playgroud)

我不知道什么是之间准确的区别$@$*,
我想"$@""$*"应该是一样的,但事实并非如此.为什么?

linux bash shell

15
推荐指数
2
解决办法
1万
查看次数

Python生成器中的GeneratorExit

我写了一个关于Python生成器的测试程序.但是我得到了一个不期望的错误.我不知道如何解释它.我来告诉你代码:

def countdown(n):
    logging.debug("Counting down")
    while n > 0:
        try:
            yield n
        except GeneratorExit:
            logging.error("GeneratorExit")
        n -= 1


if __name__ == '__main__':
    c = countdown(10)
    logging.debug("value: %d", c.next())
Run Code Online (Sandbox Code Playgroud)

我认为应该没有任何问题.但输出是:

# ./test.py
[2015/06/16 04:10:49] DEBUG    - Counting down     
[2015/06/16 04:10:49] DEBUG    - value: 10 
[2015/06/16 04:10:49] ERROR    - GeneratorExit
Exception RuntimeError: 'generator ignored GeneratorExit' in <generator object countdown at 0x7f9934407640> ignored
Run Code Online (Sandbox Code Playgroud)

为什么最后一行有错误.我不知道为什么我触发了GeneratorExit异常.我错过了什么东西生成器吗?我还将代码输入到交互式python shell中,一切正常.怎么会发生这种情况?

python generator

8
推荐指数
2
解决办法
9325
查看次数

关于Perl范围运营商

我对Perl中的范围运算符有疑问.代码在这里:

 #! /usr/bin/perl
 open FILE, "<test.txt";
 while (<FILE>) {
     print if (1 .. 5);
 }
 close FILE;
Run Code Online (Sandbox Code Playgroud)

test.txt中的内容类似于:

 1
 2
 3
 4
 5
Run Code Online (Sandbox Code Playgroud)

代码的结果是文件的所有五行.我使用时没有区别print if (1 ... 5).我认为它应该输出四行.我犯了什么错吗?

perl

7
推荐指数
2
解决办法
3478
查看次数

Python 描述符的 __get__ 中第三个参数 objtype 的用法是什么

我知道在 Python 中我们必须__get__在实现描述符时提供函数。界面是这样的:

def __get__(self, obj, objtype=None):
    pass
Run Code Online (Sandbox Code Playgroud)

我的问题是:

为什么我们必须提供objtypearg?是什么objtype用的?

我没有看到一些关于这个 arg 用法的例子。

python descriptor

6
推荐指数
1
解决办法
508
查看次数

使用引用作为键的Bash hashmap

在Bash中,我想取消设置hashmap的条目.但我失败了.代码如下:

declare -A arr
arr["a'b"]=3
echo ${!arr[@]} ## output: a'b
key="a'b"
unset arr[$key] ## error: -bash: unset: `arr[a'b]': not a valid identifier
Run Code Online (Sandbox Code Playgroud)

我怎样才能取消此条目?

linux bash dictionary

6
推荐指数
1
解决办法
179
查看次数

Erlang:{from,Pid,Ref}形式的这个进程标识符是什么?

我现在面临一个问题.当我检查erl_crash.dump时,我发现了一些如下内容:

=proc:<0.19275.17>  
State: Scheduled  
Spawned as: proc_lib:init_p/5  
Spawned by: <0.18723.17>  
Started: Wed May 8 13:30:40 2013  
Message queue length: 1  
Number of heap fragments: 0  
Heap fragment data: 0  
Link list: [<0.20051.17>, <0.9976.18>, ..., **{from,<6524.13.0>,#Ref<6524.0.1.37040>}, {from,<6474.13.0>,#Ref<6474.0.1.36682>}, {from,<6470.13.0>,#Ref<6470.0.1.34219>}**, ...]
Run Code Online (Sandbox Code Playgroud)

在proc <0.19275.17>的链接列表中有类似{from,Pid,Ref}的内容.我不知道这些奇怪的形成过程标识符是什么.我想也许它与"过程监控"有关.我对吗?我仍然想知道如何生成这样的进程标识符以及如何使用它们?

先感谢您 :)

erlang

5
推荐指数
1
解决办法
229
查看次数

Ruby的定义?操作者

我对运营商不是很清楚defined?.

例如:

 defined? var
Run Code Online (Sandbox Code Playgroud)

为什么不:

defined? :var
defined? 'var'  ## i think these two ways maybe make more sense
Run Code Online (Sandbox Code Playgroud)

但是这个运算符也可以跟一个表达式.

该操作员在什么阶段执行?在编译阶段,类似于sizeof(int)C?

ruby

5
推荐指数
1
解决办法
1300
查看次数

在Netty 4中直接使用内存

我有一个关于Netty直接内存管理的问题.

我创建了一个直接缓冲区:

@GetMapping("/new/buffer/netty/unpool")
@Synchronized
public void newBufferNetty() {
    UnpooledByteBufAllocator allocator  = UnpooledByteBufAllocator.DEFAULT;
    ByteBuf buffer = allocator.buffer(100 * 1024 * 1024);
    _myByteBufList.add(buffer);
    log.info("buffer[{}] created", buffer);
}
Run Code Online (Sandbox Code Playgroud)

然后我观察了生成的信息top,我发现内存没有变化(RES,SWAP和free).我很困惑,因为它是好的(操作系统内存信息会改变),如果我用NIO方式做的话ByteBuffer.allocateDirect(1024*1024*100);.

在我调查了源代码之后,我发现NIO创建了一个directByteBuffer,new DirectByteBuffer(cap)而Netty实际上创建了它new DirectByteBuffer(addr, cap).后一种方式,Netty没有打电话Bits.reserve(size, cap),这就是我认为为什么没有显示出变化的原因top.

我还发现Netty使用自己的计数器DIRECT_MEMORY_COUNTER来跟踪它分配的直接内存.

我的问题是:

  1. 为什么Netty Bits.reserve在分配直接内存时不会调用?

  2. 为什么Netty必须使用自己的计数器来监控直接内存的使用?

  3. (这是让我最困惑的一个)当我创建一个Netty缓冲区时,为什么os内存没有变化(UnpooledUnsafeNoCleanerDirectByteBuf)

非常感谢你提前.

java memory nio netty

5
推荐指数
1
解决办法
1300
查看次数

标签 统计

bash ×3

linux ×3

python ×2

shell ×2

descriptor ×1

dictionary ×1

elisp ×1

emacs ×1

erlang ×1

generator ×1

java ×1

memory ×1

netty ×1

nio ×1

perl ×1

pid ×1

ruby ×1