Articles of Linux操作系统

在Ubuntu上进行多播

我的情况如下:我有一台Windows机器运行一个UDP多播服务器,广播数据包。 我写了一个窗口客户端,可以在连接到networking的单独的Windows机器上捕获这些数据包,而不会出现问题。 我在Windows机器上遇到了一些防火墙问题,但是解决了这个问题。 现在,我有一个Ubuntu的12.04版本的客户端; 但是,我的程序没有find这些数据包。 我碰到了其他堆栈溢出post和一些谷歌线程提供的所有build议: 当我运行我的客户端时,netstat -g显示多播networking的IP地址 我使用sysctl将rp_filter设置为0 使用tcpdump -i wlan0时可以看到数据包 添加了一个路由(sudo route add -net 224.0.0.0 netmask 224.0.0.0 wlan0) 对于第四步,这是通过wlan0build立的无线连接,所以我在wlan0上添加路由。 同样,wlan0的rp_filter = 0。 现在,代码。 从打印报表和错误检查。 我看到,我成功绑定,join多播组,创build缓冲区等…然后,它只是在recvfrom()函数调用块。 #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <cstring> #include <unistd.h> #include <pthread.h> #include <fstream> #pragma warning( disable : 4996 ) […]

MonoGame移植到Linux

我已经在Visual Studio 2015中使用C#和MonoGame框架在Windows 7(64位)上开发了一款游戏。 游戏在Windows上运行良好,但我也想让游戏在Linux上播放。 因此,我在Windows PC上安装了Ubuntu 15.10(64位)的VirtualBox,testing是否可以让我的游戏在Ubuntu上运行。 在尝试以不同的方式编译游戏之后,我看到了一些关于将MonoGame部署到Linux的问题: 是否有可能编译一个MonoGame游戏在Windows上的VisualStudio 2015 Linux版本… 1.1。 MonoGame Linux项目? 1.2。 MonoGame Windows OpenGL项目? 1.3。 MonoGame Windows项目? (我的游戏目前是) 如果[1.]需要在Linux上安装什么程序以运行此[1.x]版本? 是否有可能(并build议)在虚拟 Ubuntu机器上的MonoDevelop中编译游戏? 甚至有可能在虚拟 Ubuntu机器上运行MonoGame游戏? 什么是在Linux上的游戏适当的可执行文件扩展名? (因为Windows上的Linux项目只是build立一个.exe) 我几乎没有使用Linux的经验,所以我希望有人可以回答我这些问题,也许有将MonoGame游戏移植到Linux的经验的人。 谢谢。

将html5页面logging为video

我的目标是有一个Ubuntu(桌面)服务器,“简单地”将html5网页转换为video。 我想捕捉平滑的CSS和JSanimation。 到目前为止,我试过这个:(phantomjs) https://gist.github.com/phanan/e03f75082e6eb114a35c 时间和帧速率不稳定或快。 目前为止,我的最佳解决scheme是在Kiosk模式下打开Goog​​le Chrome浏览器窗口,等待3秒钟,然后使用x11grab通过ffmpeg进行logging。 这感觉就像是一个“笨拙”和不专业的解决scheme。 program.sh #!/bin/bash duration=$1 outputFile=$2 stop=$(($duration+5)) ./openBrowser.sh $stop & PIDOIS=$! ./recScreen.sh $duration $outputFile & PIDMIX=$! wait $PIDIOS wait $PIDMIX recScreen.sh #!/bin/bash sleep 3 ffmpeg -video_size 1920×1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast -t "$1" "$2".mkv killall -9 chrome openBrowser.sh #!/bin/bash /usr/bin/google-chrome –kiosk […]

Valgrind和LD_PRELOAD – 对象不能被预加载

我试图运行我的程序,这需要一个库在LD_PRELOAD环境variables,valgrind。 当我这样做时,我得到以下错误: ERROR: ld.so: object '/path/to/lib/libLIBRARY.so' from LD_PRELOAD cannot be preloaded: ignored. 但是,如果我要在没有 valgrind的情况下运行程序,那么它很乐意使用LD_PRELOAD ed库。 这是为什么? 有没有办法解决这个问题? (PS系统是64位科学的linux 5,我相信)

被阻止的系统调用不会让SIGKILL终止进程

我有一个关于内核线程之间的信号传播的查询。 情景是这样的: 从用户空间应用程序进行系统调用,内核在系统调用内部创build一个线程(让它命名为thread1)。 现在在thread1中,内核在while循环中循环,并被阻塞。 主线程也在while循环中循环。 如果我执行kill -9 <“user app pid>”,应用程序将无法正常退出,即使/ proc项仍然存在,虽然/ proc // fd文件夹变空了。 如果我在主线程的while循环中join以下内容,它会正确捕获信号并退出。 如果我把以下只在thread1的while循环中,主线程仍然不退出。 if (signal_pending(current)) { return; } 你能否build议,内核在这种情况下应该如何处理kill -9信号? 在SIGKILL之后,进程的状态变成僵尸。 系统调用具有以下实现: thread1 = kthread_create(thread_fn, NULL, "thread1"); if (thread1) { wake_up_process(thread1); } printk(KERN_NOTICE "Main thread: current:%s\n", current->comm); while(1) { DELAY_SEC(1) thread_fn是: int thread_fn(void* data) { while(1) { DELAY_SEC(1) } } 问候, 索尼卡

如何在Wine下运行msi文件

每次我尝试运行这个程序,它给了我这个错误。 czipperz@CzipperzComputer~/Downloads> msiexec /i Corsair-Utility-Engine-v1.3.91.msi err:msidb:get_tablecolumns column 1 out of range err:msidb:get_tablecolumns column 2 out of range fixme:storage:create_storagefile Storage share mode not implemented. err:msidb:get_tablecolumns column 1 out of range err:msidb:get_tablecolumns column 2 out of range err:msidb:get_tablecolumns column 1 out of range err:msidb:get_tablecolumns column 2 out of range err:msidb:get_tablecolumns column 1 out of range err:msidb:get_tablecolumns column […]

pthread_create与EAGAIN失败

考虑这里的代码片段,我正在试图创build一堆线程,最终处理给定的任务,模拟竞争条件。 const int thread_count = 128; pthread_t threads[thread_count]; for (int n = 0; n != thread_count; ++n) { ret = pthread_create(&threads[n], 0, test_thread_fun, &test_thread_args); if( ret != 0 ) { fprintf( stdout, "Fail %d %d", ret, errno ); exit(0); } } 事情一般工作正常,除了偶尔pthread_create失败与errno EAGAIN“资源暂时不可用”,我试过诱导hibernate,并重试创build,但没有实际的效果。 失败是零星的,在一些盒子上没有失败,有些发生得非常频繁。 任何想法在这里可能会出错? 编辑 – 1 更新最大线程 cat /proc/sys/kernel/threads-max 256467 编辑2 我想这里的投入让我思考,我可能会做下面的,并发布任何值得分享的结果。 设置堆栈大小为最小值,我不认为thread_function使用任何大型数组。 […]

在Linux中的特定块上打开文件

出于debugging目的,我想打开一个特定的预定义块上的文件。 例如,如果我怀疑一个特定的块已经损坏,我想写入并从中读取,而我宁愿在用户模式下执行该操作,而挂载分区。 有没有办法告诉Linux,“嘿!在块4579上打开这个新文件,如果它是免费的”。 是的,我可以直接编辑块设备,但如果安装了驱动器,则可能会损坏文件系统。 通用的答案是受欢迎的,但即使是ext文件系统的家庭的答案是足够好的。

Oprofile错误:无法打开configuration文件设备:设备或资源忙

我努力在我的系统上运行oprofile因为一个恼人的错误: $ sudo opcontrol –setup –vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux $ sudo opcontrol –start ATTENTION: Use of opcontrol is discouraged. Please see the man page for operf. Using default event: CPU_CLK_UNHALTED:100000:0:1:1 Using 2.6+ OProfile kernel interface. Reading module info. Failed to open profile device: Device or resource busy Couldn't start oprofiled. Check the log file "/var/lib/oprofile/samples/oprofiled.log" and kernel […]

如何找出一个过程需要的linuxfunction?

我处于困难的境地,我不知道一个进程需要什么样的linuxfunction。 什么是最好的方法,或者找出需要什么上限的方法? 我现在唯一能想到的就是使用capsh并将所有上限都放在一个进程上。 该过程然后失败,我开始添加大写(通过删除–drop = CAP_XZY),直到它工作。 有更好的build议吗?