我有一个VirtualBox进程,我试图杀死它(-KILL/-ABORT),但没有成功.父pid是1(init).
top
显示D
记录为"不间断睡眠"的过程.
strace
没有表现出来.
我怎么能摆脱这个?它阻止我卸载vbox内核驱动程序以加载更新的驱动程序.
我试图将我的一些Objective-C项目从GCC切换到Linux上的Clang.我使用了GCC 4.6.2运行时,因为Clang编译器没有附带一个.编译和链接工作,但使用protocol_*
方法时,它们不起作用.
以下示例适用于GCC,但与Clang不符合预期:
#include <objc/runtime.h>
#include <stdio.h>
@protocol MyProtocol
+ aClassMethod;
- anInstanceMethod;
@end
void doIt(Protocol *p, SEL sel)
{
printf("the protocol: %p\n", p);
if (!p) return;
printf("the protocol's name: %s\n", protocol_getName(p));
struct objc_method_description d = protocol_getMethodDescription(p, sel, YES, YES);
printf("required: YES instance: YES ? %p\n", d.name);
d = protocol_getMethodDescription(p, sel, YES, NO);
printf("required: YES instance: NO ? %p\n", d.name);
d = protocol_getMethodDescription(p, sel, NO, YES);
printf("required: NO instance: YES ? %p\n", d.name);
d = protocol_getMethodDescription(p, sel, NO, …
Run Code Online (Sandbox Code Playgroud) 我有.pxf(AFAIK PKCS#12)证书.如何使用openssl C API确认此证书的给定密码?
鉴于我有一个由method_copyReturnType()返回的类型说明符.在随GCC提供的GNU运行时中,有各种方法可以使用类似的类型说明符objc_sizeof_type()
,objc_alignof_type()
以及其他类型.
使用Apple运行时时,没有这样的方法.
如何使用Apple运行时解释类型说明符字符串(例如获取类型的大小)而不为自己实现if/else或case开关?
[更新]
我无法使用Apple Foundation.
我正在使用我自己在Ruby中编写的分布式持续集成工具.它使用Mike Perham的"政治"分支来分配任务."政治"模块正在为mDNS部分使用线程.
我偶尔遇到一个我不明白的核心转储:
*** glibc detected *** ruby: double free or corruption (fasttop): 0x086d8600 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7cef494]
/lib/libc.so.6[0xb7cf0b93]
/lib/libc.so.6(cfree+0x6d)[0xb7cf3c7d]
/usr/lib/libruby18.so.1.8[0xb7e8adf8]
/usr/lib/libruby18.so.1.8(ruby_xmalloc+0x85)[0xb7e8b395]
/usr/lib/libruby18.so.1.8[0xb7e5065e]
...
/usr/lib/libruby18.so.1.8[0xb7e717f4]
/usr/lib/libruby18.so.1.8[0xb7e74296]
/usr/lib/libruby18.so.1.8(rb_yield+0x27)[0xb7e7fb57]
======= Memory map: ========
...
Run Code Online (Sandbox Code Playgroud)
我在Gentoo上运行并使用"-gdbg"重建Ruby和Glibc并关闭条带以获得有意义的核心:
...
Core was generated by `ruby /home/develop/dcc/bin/dcc-worker'.
Program terminated with signal 6, Aborted.
#0 0xb7f20410 in __kernel_vsyscall ()
(gdb) bt
#0 0xb7f20410 in __kernel_vsyscall ()
#1 0xb7cacb60 in *__GI___open_catalog (cat_name=0x6 <Address 0x6 out of bounds>, nlspath=0xbf9d6f00 " ", env_var=0x0, catalog=0x1) at open_catalog.c:237
#2 0xb7cae498 in __sigdelset …
Run Code Online (Sandbox Code Playgroud) 我有一个外观单例,我想将一些类方法调用转发给一些"静态"类.
乍一看,forwardInvocation:
似乎是一个可行的解决方案,然而,NSInvocation
的invokeWithTarget:
而且setTarget:
只接受一个id
,即一个指向实例,而不是一类本身.我尝试将其[MyTargetClass class]
作为目标移交,但是当我在[Facade someForwardedMethod]
某个地方打电话时,我仍然会收到"没有已知的类方法[...]"错误.当我打电话时,[[Facade sharedInstance] someForwardedMethod]
我得到一个"No visible @interface [...]声明选择器[...]"错误.
当然,我知道我还需要重写respondsToSelector:
和methodSignatureForSelector:
,所以我的代码如下所示:
- (BOOL)respondsToSelector:(SEL)aSelector {
if ([super respondsToSelector:aSelector]) {
return YES;
} else {
return [MyTargetClass respondsToSelector:aSelector];
}
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
NSMethodSignature* signature = [super methodSignatureForSelector:selector];
if (!signature) {
signature = [MyTargetClass methodSignatureForSelector:selector];
}
return signature;
}
- (void)forwardInvocation:(NSInvocation *)anInvocation {
SEL aSelector = [anInvocation selector];
if ([MyTargetClass …
Run Code Online (Sandbox Code Playgroud) 如何在Linux下使用C获取有关进程状态的信息(即,如果它是僵尸)?
在阅读了答案之后,我想稍微缩小我的问题:我更喜欢纯C解决方案.在阅读了ps源码(读取/ proc /)后,我认为应该有更好的方法并在这里问:)