小编gja*_*ain的帖子

shell脚本中的`kill -0 $ pid`是做什么的?

基本上,'0'代表什么信号,因为在这里我看到从1开始的SIGNAL数字.

bash shell scripting signals kill

137
推荐指数
4
解决办法
5万
查看次数

什么是'asmlinkage'修饰符意味着什么?

我已经读过它用于在Linux中实现系统调用的函数.例如:

asmlinkage long sys_getjiffies( void )
{
  return (long)get_jiffies_64();
}
Run Code Online (Sandbox Code Playgroud)

并告诉编译器传递堆栈上的所有函数参数.但事实并非如此吗?函数参数通常只通过在堆栈上推送它们来传递.或者我们指的是通过寄存器传递函数参数?

c assembly linux-kernel

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

为什么表达式a = a + b - (b = a)在c ++中给出了一个序列点警告?

以下是测试代码:

int main()
{
    int a = 3;
    int b = 4;
    a = a + b - (b = a); 

    cout << "a :" << a << " " << "b :" << b << "\n";    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译它会发出以下警告:

> $ g++ -Wall -o test test.cpp test.cpp: In function ‘int main()’:
> test.cpp:11:21: warning: operation on ‘b’ may be undefined
> [-Wsequence-point]
Run Code Online (Sandbox Code Playgroud)

为什么操作不确定?

根据我的理解,首先(b = a)应该评估子表达式,因为()的优先级更高,因此设置b = a.然后,由于'+'和' - '具有相同的优先级,因此表达式将以左关联方式进行计算.因此,a + b应该接下来评估,最后(b = …

c++ operators operator-precedence sequence-points

20
推荐指数
2
解决办法
2129
查看次数

当主线程调用sys.exit()时,其他线程会发生什么?

来自文档:http://docs.python.org/2/library/thread

当主线程退出时,系统定义其他线程是否存活.在使用本机线程实现的SGI IRIX上,它们存活下来.在大多数其他系统上,它们被杀死而不执行try ... finally子句或执行对象析构函数.

在这里,在文档(http://docs.python.org/2/library/threading)中,它说:

线程可以标记为"守护程序线程".这个标志的意义在于,当只剩下守护进程线程时,整个Python程序都会退出.初始值继承自创建线程.

我们在这里只讨论非守护进程线程.因为,第一个引用没有对非守护进程线程做任何特殊引用,我认为如果主线程正在退出,即使是非守护进程线程也应该被杀死.但是,第二个引用另有说法.实际上,当主线程退出时,非守护进程线程确实没有被杀死.那么,这里首先引用的是什么?

python multithreading daemon exit python-2.7

11
推荐指数
1
解决办法
1750
查看次数

在mockito中动态链接"thenReturn"

我有一个Tuple mock类,其getString(0)和getString(1)方法应该被调用n次.而不是写一些像,

when(tuple.getString(0)).thenReturn(logEntries[0]).thenReturn(logEntries[1])...thenReturn(logEntries[n - 1])
Run Code Online (Sandbox Code Playgroud)

手动,我尝试了以下内容:

OngoingStubbing stubbingGetStringZero = when(tuple.getString(0)).thenReturn(serviceRequestKey);
OngoingStubbing stubbingGetStringOne = when(tuple.getString(1)).thenReturn(logEntries[0]);
for (int i = 1; i < n; i++) {
    stubbingGetStringZero = stubbingGetStringZero.thenReturn(serviceRequestKey);
    stubbingGetStringOne = stubbingGetStringOne.thenReturn(logEntries[i]);
}
Run Code Online (Sandbox Code Playgroud)

预期的结果是所有调用都tuple.getString(0)应该返回String serviceRequestKey,每次调用都tuple.getString(1)应该返回一个不同的String,logEntries[i]即.ith调用tuple.getString(1)返回logEntries数组的第i个元素.

但是,由于一些奇怪的原因,事情正在混淆,第二次调用tuple.getString(1)返回String serviceRequestKey而不是logEntries[1].我在这里错过了什么?

java unit-testing mockito method-chaining chaining

10
推荐指数
2
解决办法
6815
查看次数

如何使用git切换到特定版本的Linux源代码?

具体来说,我想切换到内核版本2.6.32.41源代码.但是,在输出中

git tag -l

它显示以下内容:

v2.6.32-rc2
v2.6.32-rc3
v2.6.32-rc4
v2.6.32-rc5
v2.6.32-
rc6 v2.6.32-rc7
v2.6.32-rc8

其中哪一个是2.6.32.41 linux内核源码?

linux git linux-kernel

8
推荐指数
1
解决办法
693
查看次数

Linux中可执行堆栈的示例(i386架构)

我发现当我们使用嵌套函数时,GCC需要一个用于trampoline代码的可执行堆栈.但是,下面的代码,使用gcc编译时不会显示可执行堆栈.(我使用execstack来验证堆栈是否可执行)

#include <stdio.h>
#include <unistd.h>

int main()
{
        int add( int a, int b)
        {
                return a + b;
        }
        return add(2, 3);
}
Run Code Online (Sandbox Code Playgroud)

为什么这不会导致可执行堆栈?如果它不应该,那么有人可以给出一个代码构造的例子,它确实给出了一个可执行的堆栈吗?

c linux x86 gcc elf

7
推荐指数
1
解决办法
2721
查看次数

如何获取正确的.config文件来编译特定于我的硬件的Linux内核源代码?

我尝试使用make defconfig编译内核,但正如预期的那样,它无法启动.我想知道什么.config文件做内核供应商喜欢Canonical for Ubuntu使用,内核能够开箱即用启动.当然,我仍然是一个初学者并配置各种参数,目前有点超出我的联盟.

具体来说,我希望加载一个基本的"你好,世界!" 模块到我运行的内核2.6.32.41.为此,我需要针对用于运行内核的相同.config文件编译内核源代码.

linux kernel makefile linux-kernel

5
推荐指数
3
解决办法
2万
查看次数

在以下代码中没有"volatile"关键字时,编译器可以执行哪些优化?

以下是在运行Barrelfish操作系统时在Pandaboard上闪烁LED的一些代码.我的问题是,为什么不把LED的闪光灯,如果"挥发"关键字是从的定义中删除gpio_oegpio_dataout.

static volatile uint32_t *gpio_oe = (uint32_t *)(GPIO_BASE + 0x0134);
static volatile uint32_t *gpio_dataout = (uint32_t *)(GPIO_BASE + 0x013C);

void led_flash
{
    // Enable output
    *gpio_oe &= (~(1 << 8));

    // Toggle LED on and off till eternity
    while(true)
    {
      *gpio_dataout ^= (1 << 8);  // Set means LED on; Clear means LED off
       time_delay();  // To give blinking effect
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道如果变量的值可以通过程序外的源自发地改变,则需要使用volatile.但我在这里看不到这样的情况.编译器执行什么优化会使整个while循环闪烁LED无意义?这种优化背后的逻辑是什么,即.这种优化有意义的合法案例?

c embedded volatile

5
推荐指数
2
解决办法
485
查看次数

Linux 内核中的上下文切换时间

在 Linux Kernel 中,当处理器上下文从一个线程切换到另一个线程时,寄存器的状态会保存到 PCB 中,并进行更多的簿记以确保可以再次加载确切的状态。

从内核内存中保存和加载寄存器的整个过程可能需要一些 CPU 周期。那么这个时间是属于用户 CPU / 系统 CPU 还是其他地方

linux multithreading context-switch linux-kernel context-switching

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