小编chr*_*hrk的帖子

在net netns列表中看不到docker网络命名空间

当我创建一个新的docker容器时

docker run -it -m 560m --cpuset-cpus=1,2 ubuntu sleep 120
Run Code Online (Sandbox Code Playgroud)

并检查其命名空间,我可以看到已创建新的命名空间(pid 7047的示例).

root@dude2:~# ls /proc/7047/ns -la
total 0
dr-x--x--x 2 root root 0 Jul  7 12:17 .
dr-xr-xr-x 9 root root 0 Jul  7 12:16 ..
lrwxrwxrwx 1 root root 0 Jul  7 12:17 ipc -> ipc:[4026532465]
lrwxrwxrwx 1 root root 0 Jul  7 12:17 mnt -> mnt:[4026532463]
lrwxrwxrwx 1 root root 0 Jul  7 12:17 net -> net:[4026532299]
lrwxrwxrwx 1 root root 0 Jul  7 12:17 pid -> pid:[4026532466] …
Run Code Online (Sandbox Code Playgroud)

linux docker linux-namespaces

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

KVM和LXC之间的区别

KVM和Linux容器(LXC)有什么区别?对我来说,如果我们同时使用内核的"命名空间"和"控制组"功能,那么LXC也是在同一内核中创建多个虚拟机的一种方式.

kvm linux-kernel lxc cgroups linux-namespaces

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

strstr返回如何不是常数

标准函数strstr用于查找字符串中子字符串的位置.函数的两个参数都是const char *类型,但返回类型是char *.

我想知道如何实现违反const正确性的标准函数.

c c++ string

25
推荐指数
5
解决办法
2102
查看次数

'unshare'在C api中无法正常工作

这一系列命令有效:

unshare --fork --pid --mount 
umount /proc
mount -t proc proc /proc
umount /dev/pts
mount -t devpts devpts /dev/pts
Run Code Online (Sandbox Code Playgroud)

但是,相应的C程序没有按预期工作(似乎它没有卸载以前的/ proc,并且它还提供了尝试卸载devpts的EBUSY):

unshare(CLONE_NEWPID | CLONE_NEWNS );
int pid = fork();
if (pid != 0) {
    int status;
    waitpid(-1, &status, 0);
    return status;
}

printf("My pid: %i\n", getpid()); // It prints 1 as expected

umount("/proc"); // Returns 0

system("mount"); // Should print error on mtab, but it prints the previous mounted filesystems

mount("proc", "/proc", "proc",
      MS_MGC_VAL | MS_NOSUID | MS_NOEXEC | MS_NODEV, …
Run Code Online (Sandbox Code Playgroud)

c linux linux-namespaces

20
推荐指数
1
解决办法
1494
查看次数

如何从单个流程实例创建多个网络命名空间

我正在使用以下C函数从单个流程实例创建多个网络命名空间:

void create_namespace(const char *ns_name)
{
    char ns_path[100];

    snprintf(ns_path, 100, "%s/%s", "/var/run/netns", ns_name);
    close(open(ns_path, O_RDONLY|O_CREAT|O_EXCL, 0));
    unshare(CLONE_NEWNET);
    mount("/proc/self/ns/net", ns_path, "none", MS_BIND , NULL);
}
Run Code Online (Sandbox Code Playgroud)

在我的进程创建了所有namspaces之后,我在任何一个网络命名空间(带命令)中添加了一个tap接口ip link set tap1 netns ns1,然后我实际上在所有命名空间中看到了这个接口(可能,这实际上是一个名称不同的命名空间).

但是,如果我通过使用多个进程创建多个名称空间,那么一切正常.

这可能有什么问题?我是否必须将任何其他标志传递unshare()给单个流程实例?是否存在单个流程实例无法创建多个网络命名空间的限制?或者是否存在mount()调用问题,因为/proc/self/ns/net实际上已多次挂载?

更新: 似乎unshare()函数正确创建了多个网络命名空间,但/var/run/netns/实际上所有挂载点都引用了该挂载中安装的第一个网络命名空间.

Update2: 似乎最好的方法是fork()另一个进程并从那里执行create_namespace()函数.无论如何,我很高兴听到一个更好的解决方案,不涉及fork()调用或至少得到一个确认,证明不可能从单个进程创建和管理多个网络命名空间.

Update3: 我可以使用以下代码使用unshare()创建多个名称空间:

int  main() {
    create_namespace("a");
    system("ip tuntap add mode tap tapa");
    system("ifconfig -a");//shows lo and tapA interface
    create_namespace("b");
    system("ip tuntap add mode tap tapb");
    system("ifconfig …
Run Code Online (Sandbox Code Playgroud)

c linux networking network-programming linux-namespaces

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

Gunicorn无法加载Flask应用程序

我有一个Flask应用程序,我试图通过Gunicorn服务.

我正在使用virtualenv和python3.如果我将我的venv cd激活到我的app base dir,那么运行:

gunicorn mysite:app
Run Code Online (Sandbox Code Playgroud)

我明白了:

Starting gunicorn
Listening at http://127.0.0.1:8000
DEBUG:mysite.settings:>>Config()
...
Failed to find application: 'mysite'
Worker exiting
Shutting down: master
Reason: App failed to load
Run Code Online (Sandbox Code Playgroud)

查看/ etc/nginx/sites-available我只有文件'default'.在已启用网站的情况下,我没有文件.

在我的nginx.conf文件中,我有:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
Run Code Online (Sandbox Code Playgroud)

应用结构:

mysite    #this is where I cd to and run gunicorn mysite:app
--manage.py
--/mysite
----settings.py
----__init__.py
Run Code Online (Sandbox Code Playgroud)

manage.py为mysite的我有以下几点:

logger.debug("manage.py entry point")
app = create_app(app_name)
manager = Manager(app)

if __name__ == "__main__":
    manager.run()
Run Code Online (Sandbox Code Playgroud)

__init__.py档案中:

def create_app(object_name):
    app = Flask(__name__)
    #more setup …
Run Code Online (Sandbox Code Playgroud)

python nginx flask gunicorn

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

创建僵尸进程

我有兴趣创建一个僵尸进程.根据我的理解,当父进程在子进程之前退出时,就会发生僵尸进程.但是,我尝试使用以下代码重新创建僵尸进程:

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main ()
{
  pid_t child_pid;

  child_pid = fork ();
  if (child_pid > 0) {
    exit(0);
  }
  else {
    sleep(100);
    exit (0);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码在执行后立即退出,这是预期的.但是,就像我一样

ps aux | grep a.out
Run Code Online (Sandbox Code Playgroud)

我发现a.out只是作为一个正常的进程运行,而不是像我预期的那样的僵尸进程.

我使用的操作系统是ubuntu 14.04 64位

c linux operating-system fork zombie-process

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

ld:1个用于体系结构x86_64的重复符号

我对C和C++编程非常陌生,并且在软件编程方面经验很少(我的背景是基于Web的)但我正在尝试使用C/C++和Xcode ...所以我发现这段代码(以及许多类似的在线变体):

#include <stdio.h>

int main()
{
    printf ("Test");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,当我在Xcode中编译它时,我收到以下错误:

> duplicate symbol _main in:
>     /Users/thomas/Library/Developer/Xcode/DerivedData/test-etqojvxbxhxjqeggdzkbfufvbeza/Build/Intermediates/test.build/Debug/test.build/Objects-normal/x86_64/first.o
>     /Users/thomas/Library/Developer/Xcode/DerivedData/test-etqojvxbxhxjqeggdzkbfufvbeza/Build/Intermediates/test.build/Debug/test.build/Objects-normal/x86_64/main.o
> ld: 1 duplicate symbol for architecture x86_64 clang: error: linker
> command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

也许Xcode对于我作为新手使用是错误的吗?如果有人可以推荐一个更好的编译器,那也会很棒!

c xcode6

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

如何阻止循环arduino

我有这个循环,我将如何结束循环?

 void loop() {
      // read the pushbutton input pin:

       a ++;
      Serial.println(a);
        analogWrite(speakerOut, NULL);

      if(a > 50 && a < 300){
      analogWrite(speakerOut, 200);
      }

      if(a <= 49){
        analogWrite(speakerOut, NULL);
      }

      if(a >= 300 && a <= 2499){
          analogWrite(speakerOut, NULL);
      }
Run Code Online (Sandbox Code Playgroud)

c loops arduino

11
推荐指数
3
解决办法
15万
查看次数

如何在C++中检测声明但未定义的函数?

以下编译,链接和运行就好了(在Xcode 5.1/clang上):

#include <iostream>

class C { int foo(); };

int main(int argc, const char * argv[])
{
    C c;
    cout << "Hello world!";
}
Run Code Online (Sandbox Code Playgroud)

但是,C::foo()在任何地方都没有定义,只是声明了.我没有得到任何编译器或链接器警告/错误,显然是因为C::foo()从未在任何地方引用过.

有没有什么方法可以发出一个警告:在整个程序中,即使声明了C :: foo()也没有定义?错误实际上会更好.

谢谢!

c++ xcode

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