我正在使用一些具有3级继承级别的代码.从最低级派生类,调用方法2的语法是什么,层次结构升级,例如super.super调用?"中间"类没有实现我需要调用的方法.
我正在尝试在C中创建一个简单的shell程序.我需要它做的是为用户提供一个可以运行其他本地程序的提示.我可以使用fork()来完成该部分,其中父进程在子进程上等待(),而子进程execvp()是程序.
但是,如果'&'字符附加到用户命令的末尾,我需要他们的程序在后台运行,这意味着我需要父进程不等待子进程,而是立即将提示返回给用户,同时允许后台进程继续运行,但不允许它在屏幕上显示任何内容.我只是想通过ps命令检查它是否仍然存在.
我试图理解使用fork()创建子项的想法,然后让子fork()再次创建一个类的孙子,然后立即退出() - 子进程.即,孤儿孙子.据说这允许父母仍然等待孩子,但由于孩子几乎立即有效地结束,它就像它不等待?关于僵尸疯狂的事情?我不知道.我遇到过的几个网站似乎都建议将其作为在后台运行流程的一种方式.
但是,当我尝试这样做的时候,我发现程序流程发生了很多事情,"背景"过程继续在屏幕上显示输入,我真的不知道从哪里开始.
这是我对代码的实现,我确信这是非常错误的.我只是想知道这整个孙子的事情是否是我需要采取的路线,如果是这样,我的代码有什么问题?
36 int main(int argc, char *argv[])
37 {
38 char buffer[512];
39 char *args[16];
40 int background;
41 int *status;
42 size_t arg_ct;
43 pid_t pid;
44
45 while(1)
46 {
47 printf("> ");
48 fgets(buffer, 512, stdin);
49 parse_args(buffer, args, 16, &arg_ct);
50
51 if (arg_ct == 0) continue;
52
53 if (!strcmp(args[0], "exit"))
54 {
55 exit(0);
56 }
57
58 pid = fork(); //here I fork and create a child …
Run Code Online (Sandbox Code Playgroud) 我有一个并行化的自动化脚本,需要调用许多其他脚本,其中一些脚本因为(错误地)等待标准输入或等待各种其他不会发生的事情而挂起.这不是什么大不了的事,因为我抓住那些惊慌失措的人.诀窍是在孩子关闭时关闭那些悬挂的孙子进程.我认为各种各样的咒语SIGCHLD
,等待和过程小组都可以做到这一点,但是它们都会阻止而且孙子孙女都没有收获.
我的解决方案有效,但似乎不是正确的解决方案.我对Windows解决方案还不是特别感兴趣,但我最终也需要它.我的只适用于Unix,现在还可以.
我写了一个小脚本,它可以运行同时并行的子节点数和fork的总数:
$ fork_bomb <parallel jobs> <number of forks>
$ fork_bomb 8 500
Run Code Online (Sandbox Code Playgroud)
这可能会在几分钟内达到每用户进程限制.我发现的许多解决方案只是告诉你增加每用户进程限制,但我需要这个运行大约300,000次,所以这不会起作用.同样,重新执行等建议以清除流程表并不是我需要的.我想实际修复问题,而不是在它上面拍打胶带.
我抓取进程表寻找子进程并在处理程序中单独关闭挂起的进程SIGALRM
,这需要死掉,因为其余的实际代码在此之后没有成功的希望.从性能角度来看,kludgey爬过进程表并不会让我烦恼,但我不介意不这样做:
use Parallel::ForkManager;
use Proc::ProcessTable;
my $pm = Parallel::ForkManager->new( $ARGV[0] );
my $alarm_sub = sub {
kill 9,
map { $_->{pid} }
grep { $_->{ppid} == $$ }
@{ Proc::ProcessTable->new->table };
die "Alarm rang for $$!\n";
};
foreach ( 0 .. $ARGV[1] )
{
print ".";
print "\n" unless $count++ % 50;
my $pid = $pm->start and next;
local …
Run Code Online (Sandbox Code Playgroud) 我测试了这样的代码:
class A
{
public A() { }
public virtual void Test ()
{
Console.WriteLine("I am A!");
}
}
class B : A
{
public B() { }
public override void Test()
{
Console.WriteLine("I am B!");
base.Test();
}
}
class C : B
{
public C() { }
public override void Test()
{
Console.WriteLine("I am C!");
base.base.test(); //I want to display here "I am A"
}
}
Run Code Online (Sandbox Code Playgroud)
并尝试从C类方法调用A类(祖父母的方法).但它不起作用.请告诉我一种调用祖父母虚拟方法的方法.
对于那些了解rails和sql的人,我正在寻找一些你可以指出的好信息.我的查询非常类似于本节中的"加入嵌套关联"示例 - http://guides.rubyonrails.org/active_record_querying.html#using-array-hash-of-named-associations
我的模型(缩写)如下,
User has_many :products # User is 'great-grandparent'
Product has_many :posts # Product is grandparent #1
Event has_many :posts # Event is grandparent #2
Post belongs_to :event
Post belongs_to :product
Post has_many :orders # Post is parent
Order belongs_to :post # Order is great-grandchild, grandchild, & child
Run Code Online (Sandbox Code Playgroud)
我想收集用户(卖家)的活动订单,这是我最好的解决方案.
class Order < ActiveRecord::Base
def self.collect_for_seller_and_event(user_id, event_id)
self.joins(:post => [{:product => :user }, :event]).where(:post => [{:product => {:user_id => user_id}}, {:event_id => event_id}])
end
Run Code Online (Sandbox Code Playgroud)
这次加入应该是什么样的?
我是否应该将其分解为菊花链上各种型号的范围?
为了表明我在这里有一个基本的理解,我已经能够得到我的第一个工作嵌套连接表(我对这个成就感到非常兴奋)
BuyerFeedback
belongs_to …
Run Code Online (Sandbox Code Playgroud) 我需要将一个元素对齐到它的'祖父母'的边缘.
这是代码的示例:
<div id='grandparent'>
<div class='parent' style='display:inline-block'>
<div class='child'></div>
</div>
<div class='parent' style='display:inline-block'>
<div class='child'></div>
</div>
<div class='parent' style='display:inline-block'>
<div class='child'></div>
</div>
<div class='parent' style='display:inline-block'>
<div class='child'></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
因此.parent元素将被内联定位,这取决于#grandparent元素的宽度.我需要将每个.child元素定位到#grandparent的左边缘.
没有javascript,这有可能吗?
所以我正在尝试对模型伟大的granchildren执行查询.关系如此......
比赛>比赛>比赛>球员
和锦标赛模型:
class Tournament < ActiveRecord::Base
has_many :competitions, :dependent => :destroy
has_many :matches, :through => :competitions
has_many :players, :through => :matches
end
Run Code Online (Sandbox Code Playgroud)
目前我所拥有的用于检索所有伟大的孙子孙记录的是:
@results = @tournament.competitions.collect{|b| b.matches.collect{|c| c.players.with_win_count}}.flatten
Run Code Online (Sandbox Code Playgroud)
这是有效的,但问题是它返回一个数组.我要做的是基于用户输入构建动态查询,并且播放器表本质上是所有匹配的结果池,并且用户可以选择仅过滤他想要看到的内容.我最终得到的是一个相当复杂的(取决于用户输入)查询以及无法在数组上执行的附加where子句.为了让您更好地了解这是如何工作的,这是我的代码......
def results
@tournament = Tournament.find(params[:id])
@results = @tournament.all_great_grandchildren
@results.where(params[:player_condition1]) if params[:player_condition1]
@results.where(params[:player_condition2]) if params[:player_condition2]
@results.where(params[:player_condition3]) if params[:player_condition3]
if params[:match_condition]
#Join to match table so we can query the match fields
@results.join(:match)
@results.where(params[:match_condition])
end
....
@results.order(params[:order]) if params[:order]
end
Run Code Online (Sandbox Code Playgroud)
有没有办法找到没有阵列的任何特定锦标赛的所有伟大的孙子(球员)记录,所以我可以继续调整记录?
如何在 javascript 中获取文档的孙子 div 和 iframe ?我有 div 的 id 和 iframe 的名称
我有以下代码,我正在尝试通过分叉创建子进程.我希望确实有3个子流程.然而,当我运行代码时,我似乎变得越来越多,可能是因为孩子们处理分叉孙子.我在这里想念的是什么,我该如何防止这种情况发生.
码:
for(j = 0; j < 3 ; j++){
if((pid = fork()) == 0){ // child process
dosomething();
exit(0); // terminate child process
}
else if((pid = fork()) > 0){
printf("I'm in parent of the client spawn loop\n");
// exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of …
Run Code Online (Sandbox Code Playgroud) grandchild ×9
c ×2
fork ×2
inheritance ×2
join ×2
unix ×2
.net ×1
alarm ×1
alignment ×1
arrays ×1
c# ×1
css ×1
document ×1
dynamicquery ×1
element ×1
get ×1
html ×1
javascript ×1
kill ×1
parent ×1
perl ×1
python ×1
python-2.7 ×1
super ×1