小编zer*_*kms的帖子

如何优雅地处理SIGTERM信号?

让我们假设我们有一个用python编写的这样一个简单的守护进程:

def mainloop():
    while True:
        # 1. do
        # 2. some
        # 3. important
        # 4. job
        # 5. sleep

mainloop()
Run Code Online (Sandbox Code Playgroud)

然后我们使用start-stop-daemon默认的send SIGTERM(TERM)信号进行守护--stop.

我们假设当前执行的步骤是#2.在这个时刻,我们正在发送TERM信号.

会发生什么是执行立即终止.

我发现我可以处理信号事件,signal.signal(signal.SIGTERM, handler)但问题是它仍然会中断当前执行并将控制传递给handler.

所以,我的问题是-它可以不中断当前执行,但处理TERM(?)在独立的线程信号,使我能够设置shutdown_flag = True,使mainloop()有机会停止正常?

python daemon sigterm start-stop-daemon

177
推荐指数
6
解决办法
13万
查看次数

为什么这个循环产生"警告:迭代3u调用未定义的行为"并输出超过4行?

编译:

#include <iostream>

int main()
{
    for (int i = 0; i < 4; ++i)
        std::cout << i*1000000000 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

gcc产生以下警告:

warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations]
   std::cout << i*1000000000 << std::endl;
                  ^
Run Code Online (Sandbox Code Playgroud)

我知道有一个有符号的整数溢出.

我不能得到的是为什么i价值被溢出操作打破了?

我已经阅读了为什么x86上的整数溢出与GCC导致无限循环的答案,但我仍然不清楚为什么会发生这种情况 - 我认为"未定义"意味着"任何事情都可能发生",但这种特定行为的根本原因是什么?

在线:http://ideone.com/dMrRKR

编译: gcc (4.8)

c++ gcc undefined-behavior

160
推荐指数
5
解决办法
6万
查看次数

为什么pycharm建议将方法更改为static

新的pycharm发行版(3.1.3社区版)建议将不能使用当前对象状态的方法转换为静态.

在此输入图像描述

这有什么实际的原因?某种微观性能( - 或内存) - 优化?

python pycharm

133
推荐指数
6
解决办法
7万
查看次数

用g ++编译多线程代码

我有最简单的代码:

#include <iostream>
#include <thread>

void worker()
{
    std::cout << "another thread";
}

int main()
{
    std::thread t(worker);
    std::cout << "main thread" << std::endl;
    t.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然我仍然无法编译它g++来运行.

更多细节:

$ g++ --version
g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

编译命令:

$ g++ main.cpp -o main.out -pthread -std=c++11
Run Code Online (Sandbox Code Playgroud)

运行:

$ …
Run Code Online (Sandbox Code Playgroud)

c++ linux ubuntu gcc g++

85
推荐指数
4
解决办法
8万
查看次数

是否有内置方法来获取Doctrine 2实体中的所有已更改/更新的字段

让我们假设我检索一个实体$e并用setter修改它的状态:

$e->setFoo('a');
$e->setBar('b');
Run Code Online (Sandbox Code Playgroud)

有没有可能检索已更改的字段数组?

在我的例子的情况下,我想要检索foo => a, bar => b结果

PS:是的,我知道我可以修改所有的访问者并手动实现这个功能,但我正在寻找一些方便的方法来做到这一点

php doctrine symfony doctrine-orm

76
推荐指数
5
解决办法
6万
查看次数

如何从"参数"中获取切片

所有你知道的arguments是一个特殊的对象,它包含传递给函数的所有参数.

只要它不是一个数组 - 你就不能使用类似的东西arguments.slice(1).

那么问题 - 如何切割除第一个元素之外的所有元素arguments

UPD:

似乎没有办法没有将它转换为数组

var args = Array.prototype.slice.call(arguments);
Run Code Online (Sandbox Code Playgroud)

如果有人发布另一个解决方案,那将是很好的,如果没有 - 我将检查第一个上面的行作为答案.

javascript

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

如何将实体重新保存为Doctrine 2中的另一行

假设我有实体$e.有没有通用的方法将它存储为另一行,它将具有相同的实体数据但是另一个主键?

为什么我需要这个:我正在实现某种时态数据库模式,而不是更新行我只需要创建另一个.

php doctrine temporal-database doctrine-orm

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

在数组中搜索匹配的属性

我有一个数组,我需要返回一个餐馆的名字,但我只知道它的"食物"属性的价值(不是它的索引号).

例如,如果我只知道"鸡",我怎么能归还"肯德基"?

restaurants = 
  [
    {"restaurant" : { "name" : "McDonald's", "food" : "burger" }},
    {"restaurant" : { "name" : "KFC",        "food" : "chicken" }},
    {"restaurant" : { "name" : "Pizza Hut",  "food" : "pizza" }}
  ];
Run Code Online (Sandbox Code Playgroud)

javascript

56
推荐指数
5
解决办法
13万
查看次数

"安全"TO_NUMBER()

SELECT TO_NUMBER('*') FROM DUAL
Run Code Online (Sandbox Code Playgroud)

这显然给了我一个例外:

ORA-01722:无效的号码

有没有办法"跳过"它得到0NULL取而代之?

整个问题:我有NVARCHAR2字段,其中包含数字而不是几乎;- *) (喜欢),我需要从列中选择最大的数字.

是的,我知道这是一个糟糕的设计,但这就是我现在需要的......: - S

UPD:

对我自己,我已经解决了这个问题

COALESCE(TO_NUMBER(REGEXP_SUBSTR(field, '^\d+')), 0)
Run Code Online (Sandbox Code Playgroud)

oracle type-conversion ora-01722

52
推荐指数
5
解决办法
6万
查看次数

如何使Authorize属性返回自定义403错误页面而不是重定向到登录页面

[Authorize] 属性很好,方便的MS发明,我希望它能解决我现在遇到的问题

更具体:

当前客户端未经过身份验证时 - [Authorize]从安全操作重定向到登录页面,并且在登录成功后 - 将用户带回,这很好.

但是当当前客户端已经过身份验证但没有被授权运行特定操作时 - 我只需要显示我的常规403页面.

是否可以在控制器体内移动授权逻辑?

更新:我需要的行为应该在语义上等于这个草图:

public ActionResult DoWork()
{
    if (!NotAuthorized())
    {
        // this should be not redirect, but forwarding 
        return RedirectToAction("403");         
    }

    return View();
}
Run Code Online (Sandbox Code Playgroud)

所以 - 应该没有任何重定向和url应该保持不变,但页面的内容应该替换为403页

更新2:我以这种方式实现了草图:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

    [CustomActionFilter]
    public ActionResult About()
    {
        return View();
    }

    public ActionResult Error_403()
    {
        return Content("403");
    }
}

public class CustomActionFilter …
Run Code Online (Sandbox Code Playgroud)

.net c# security asp.net-mvc authorization

51
推荐指数
2
解决办法
4万
查看次数